Спирала, намиране на единичен знак в низ
Спирала група
Намиране на единичен знак в низ като Струна . Java JDK 1.6.
Намирането на единичен знак в подниз често се смята за намиране на подниз от един символ в даден низ. В такава ситуация не е ясно кой от методите може да се използва: indexOf (String s) или indexOf (int ch)? Например, за да намерите символа F, можете да използвате indexOf ("F") или indexOf ('F') .
Редица статии съветват използването на един или друг метод и не предоставят нито един тест. Някои програмисти са разтревожени, че аргументът не е променлива char, а променлива int, която може да съдържа всяка кодова точка на Unicode. И поради липсата на разбиране за кодовите точки на Unicode, пълната поддръжка за които е въведена в JDK 1.5, използвайте метода indexOf ("F") .
Обективен отговор може да се получи само чрез изследване на изходните кодове на JDK, които могат да се променят от версия на версия, както и чрез писане на един или повече тестове.
Следващата програма демонстрира времената за търсене на един символен подниз по два начина:
- методът indexOf на класа String с аргумент от типа String;
- използване на метода indexOf на класа String с аргумент - символ (Unicode кодова точка).
публична статична void main (String args [])
StringBuffer sb = нов StringBuffer ("CBABA");
Низова дума = "AAAAAAF";
Низ str = sb.toString ();
System.out.println ("Номер на символите в изходния низ =" + str.length ());
дълъг старт = System.currentTimeMillis ();
pos = str.indexOf ("F");
дълъг край = System.currentTimeMillis ();
System.out.println ("метод indexOf със символа String."+
"Изминало време:" + (край-старт) + "msec");
System.out.println ("метод indexOf със символа String."+
"Намерен низ в позиция:" + pos);
pos = str.indexOf ('F');
System.out.println ("метод indexOf със символ (кодова точка на Unicode)."+
"Изминало време:" + (край-старт) + "msec");
System.out.println ("метод indexOf със символ (кодова точка на Unicode)."+
"Намерен низ в позиция:" + pos);
java - Xmx 1024 M SingleSymbolSearch
За да започнете, се нуждаете от достатъчно място в RAM, ако се покаже грешка, свързана с липса на памет, тогава можете да я намалите в цикъла for (int i = 0; i
Резултати от програмата:
Номер на символите в изходния низ = 130000012
indexOf метод със String символ. Изминало време: 437 msec
indexOf метод със String символ. Намерен низ на позиция: 130000011
indexOf метод със символ (кодова точка на Unicode). Изминало време: 641 msec
indexOf метод с символ (кодова точка на Unicode). Намерен низ на позиция: 130000011
В горната програма символът „F“ е изрично посочен като аргумент, който ще бъде трансформиран от компилатора в Unicode код (Unicode кодова точка).
Резултатите от теста показват, че когато се търси единичен символ, използвайки метода indexOf ("F") вместо indexOf ('F'), като се използва знак (Unicode кодова точка) като аргумент, печалбата във времето може да бъде 0% - 20 % в зависимост от дължината на низа и местоположението на намерения символ. Средното изплащане е 10%. Причината за печалбата във времето може да бъде намерена в изходните кодове на класа String за методите от семейството indexOf () .