GrabDuck

1.10. Работа со строками класса String

:

Назад Вперед

1.10. Работа со строками класса String

В примере демонстрируются основные приемы работы с объектами класса String. Такие объекты применяются для представления текстовых строк.

Исходный текст примера

Архив проекта для Java WorkShop 2.0

Немного теории

Для работы со строками в Java предусмотрен класс String. Помимо многочисленных конструкторов, позволяющих создавать строки из объектов других типов, в этом классе имеются различные методы, предназначенные для выполнения над строками самых нужных операций.

С помощью этих методов можно сливать строки и выделять подстроки, преобразовывать символы строки в строчные или прописные, выполнять поиск последовательностей символов в начале, конце или в произвольном месте строки и так далее. Есть также средства для сравнения строк.

Описание примера

В примере мы выполняем несколько операций над строками. Результат этих операций отображается на консоли.

Прежде всего программа создает строку szStr на базе массива символов chArray:

char[] chArray = {'*', 'A', 'B', 'C', '*'};
String szStr = String.copyValueOf(chArray);
System.out.println("szStr = " + szStr); 

Для выполнения такого преобразования мы применили метод copyValueOf. Этот статический метод возвращает ссылку на строку, созданную из массива символов Unicode.

Дальнейшая работа программы происходит в цикле.

В начале цикла программа вводит строку символов с консоли (то есть с клавиатуры):

byte bKbd[] = new byte[256];
int iCnt = 0;
try
{
  iCnt = System.in.read(bKbd);
}
catch(Exception ex)
{
  System.out.println(ex.toString()); 
}

Эта процедура имеет некоторые особенности.

Для ввода строки мы вызываем статический метод System.in.read. Он возвращает количество введенных символов, которое мы сохраняем в переменной iCnt. Введенные символы попадают в массив байт bKbd.

Так как этот массив содержит байты, а не символы Unicode, для преобразования массива в строку мы не можем воспользоваться только что упомянутым методом copyValueOf. Вместо этого мы применили следующую форму конструктора:

szStr = new String(bKbd, 0, iCnt);

Через первый параметр конструктору передается ссылка на преобразуемый массив байт. Второй параметр задает старший байт 16-разрядного значения Unicode, который будет подставлен во все символы создаваемой строки. И, наконец, последний параметр конструктора задает количество элементов массива, составляющих строку. Здесь мы указали значение, сохраненное в переменной iCnt методом System.in.read.

Далее с помощью класса StringTokenizer мы удаляем из полученной строки символы возврата каретки и перевода строки:

StringTokenizer st;
st = new StringTokenizer(szStr, "\r\n");
szStr = new String((String)st.nextElement());

На следующем этапе программы проверяет строку szStr, используя для этого различные методы класса String.

Прежде всего, программа сравнивает строку szStr и строку "end":

if(szStr.compareTo("end") == 0)
{
  System.out.println("\nEnd"); 
  break;
}

Если пользователь ввел строку "end", работа цикла завершается.

Далее мы проверяем, не заканчивается ли строка тремя символами '*' и не начинается ли она с трех символов '-':

else if(szStr.endsWith("***"))  
{
  System.out.println("Stars ***"); 
}
    
else if(szStr.startsWith("---"))  
{
  System.out.println("Minus ---"); 
}

Для проверки конца и начала строки szStr мы использовали, соответственно, методы endsWith и startsWith.

Поиск подстроки внутри строки удобно выполнять с помощью метода indexOf:

else if(szStr.indexOf("+++") != -1)
{
  System.out.println("Plus +++"); 
}

Условие будет выполнено, если в любом месте строки есть три идущих подряд символа '+'.

Для слияния строк можно применять оператор +. В виде исключения этот оператор перегружен для класса String. Аналогичного результата, однако, можно добиться и с помощью метода concat:

szStr = "<<<" + szStr.concat(">>>");
System.out.println("szStr = " + szStr); 

В последних строках цикла мы вызываем метод toLowerCase:

szStr = szStr.toLowerCase();
System.out.println(
  "Lower case szStr = " + szStr); 

Он выполняет преобразование символов строки в строчные.

Назад Вперед