Хотя Java разработана на основе C ++, она улучшила многие недостатки C ++. Одна из вещей, которые необходимо упомянуть, - это струны. Мы знаем, что с углублением обучения при входе MFC при обработке строк или символов вам часто нужно использовать макрос _t () для превращения символов или строк в тип Unicode. В противном случае ошибка возникнет во время обработки. В Java персонаж Чар или персонажи, хранящиеся в классе персонажей, представляют собой не один байт, а 2 байта. Используется Unicode, который должен поддерживать всех персонажей в мире.
Последовательность символов образует строку, и существует два типа строк: один из них - это константа строки, которая не должна быть изменена после создания, которая называется константой строки. В Java он хранится с использованием класса строк;
Одним из них является строковая переменная, которую необходимо изменить после создания, называемой строковой переменной. В Java он работает и управляется с помощью класса StringBuffer.
StringBuffer Class
1. Создать объект класса StringBuffer
Объект класса StringBuffer представляет собой строковую переменную (обратите внимание, что это «переменная»). Каждый объект класса StringBuffer - это строковая переменная, которая может быть расширена и изменена. Ниже приведены обычно используемые конструкторы класса StringBuffer:
(1) Public StringBuffer ()
Создайте новый пустой объект класса StringBuffer с начальным значением его емкости, установленной на 16 символов (обратите внимание, что это 16 символов)
(2) public Stringbuffer (int длина)
Создать новый пустой объект StringBuffer, начальное значение емкости которого установлено на символы длины
(3) Public StringBuffer (String Str)
Создайте новый объект StringBuffer, содержимое которого является содержанием STR, и емкость установлена на длину STR и добавьте 16 символов (примечание: добавьте 16 символов)
2. Общие методы объекта класса StringBuffer
(1) Расширение объекта класса StringBuffer
Класс StringBuffer предоставляет два набора методов для расширения символов, содержащихся в объекте StringBuffer, а именно:
1) Public StringBuffer добавите
(Объект obj)
Метод добавления используется для расширения символов, содержащихся в объекте StringBuffer. После преобразования указанного объекта параметра в строку добавляет его после исходного объекта StringBuffer и возвращает новый объект StringBuffer. Дополнительные объекты параметров могут быть различных типов данных, таких как int, char, string, double и т. Д.
2) Общедоступная вставка StringBuffer (
int вставить смещение позиции, тип объекта параметра, имя объекта параметра)
Этот метод преобразует указанный объект параметра в строку, вставляет его в указанную позицию в исходном объекте StringBuffer и возвращает новый объект StringBuffer.
(2) Длина и емкость объекта класса StringBuffer
Длина объекта класса StringBuffer относится к количеству символов, которые он содержит; емкость относится к количеству выделенного пространства символов.
1) Public Int Length ()
Этот метод возвращает количество символов, содержащихся в текущем объекте класса StringBuffer.
2) Public int емкость ()
Этот метод возвращает количество символов, выделяемое текущим объектом класса StringBuffer.
(3) Модификация объекта класса StringBuffer
public void setcharat (intindex, chearch)
Этот метод заменяет символ в положении индекса в текущем объекте StringBuffer с указанным символом CH.
(4) Назначение и добавление строк
Строки - это типы данных, которые часто используются в программах. Назначение и добавление строк представлены в системе компиляции Java.
(5) Другие методы аналогичны методам String Class
3. Используйте класс StringTokenizer для разложения строк
Класс StringTokenizer расположен в пакете java.util, и при использовании этого класса он добавляется в начале программы.
importjava.util.stringtokenizer или
importjava.util.*
Класс StringTokenizer
Для класса StringTokenizer его основной функцией является разделение строки в соответствии с данным разделенным символом, а его функция аналогична методу разделения класса строки
1. Конструктор класса StringTokenizer
(1) StringTokenizer (Stringstr)
Создать объект StringTokenizer для данной строки Str, разделитель которого установлен на «/t/n/r/f», то есть: пространство, горизонтальная вкладка, разрыв линии, возврат каретки, символ таблицы
(2) StringTokenizer (String Str, String Delim)
Создайте объект StringTokenizer для данной String Str, разделитель которой является указанный строковой делим и по умолчанию не содержит разделителя.
3) StringTokenizer (String Str, String Delim, Boolean returnDelims)
Создайте объект StringTokenizer для данной строки STR, разделитель которой является указанный строковый делим. Если returndelims это правда, каждая строка в созданном объекте StringTokenizer содержит разделитель, в противном случае он не содержит разделителя.
2. Общие методы класса StringTokenizer
nintcounttokens ()
Возвращает количество подстроков в объекте StringTokenizer после разделения
nbooleanhasmoreelements ()
Функция этого метода такая же, как и в методе hasmoretokens ()
nbooleanhasmoretokens ()
Обнаружение, содержит ли объект StringTokenizer разделенную подстроение. Если это так, это вернет True, в противном случае он вернет ложь.
ObjectNextElement ()
Этот метод имеет ту же функцию, что и NextToken (). Основное отличие заключается в том, что он возвращает не строковый объект, а объект объекта
StringNextToken ()
Вернуть следующую разделенную подстроение в объекте StringTokenizer
StringNextToken (String delim)
Возвращает следующее разделенное подстроение в объекте StringTokenizer, но разделитель сброшен до делима
На самом деле, в некоторых языках программирования, таких как C, строка состоит из массивов символов, а конец каждой строки отмечен «/0», но это не так на Java.
Nin Java, струны обычно существуют как объекты класса строки, такие как: Strings = «Мне нравится Java!», Где «Мне нравится Java!» это объект.
Следовательно, строки и массивы персонажей в Java совершенно разные, и они также отличаются от струн в C!
NIN Заказ об облегчении преобразования строковых и символов, многие такие конструкторы и методы предоставляются в классе строки
n, например, строка конструктора (char [] value)
n Метод toCharraray ()
Значение метода (данные [char [])
Постоянный бассейн
Для строковых постоянных, которые появляются в исходной программе, когда программа работает, они будут сохранены в постоянном пуле для кеша.
Сравнение переменных, которые ссылаются на эти строки, кэшированные в постоянных пулах, также получит правильный результат с ==.
Однако во время выполнения различные операции на строках, таких как +, подстроение и т. Д., Будут создавать новые строковые объекты.
Но мощные компиляторы оптимизируют строчки констант струн, например, когда S3 = "ад" + "O", S3 все равно будет указывать на строку в постоянном пуле. Однако для переменных операций невозможно требовать, чтобы виртуальная машина выполнялась, такая как S1 + S2, и определить, находится ли результат в постоянном пуле. Следовательно, используйте, а не ==, чтобы определить, равны ли две строки.
Public Static Void Main (String [] args) {// Строковые константы помещаются в постоянный пул. String S1 = "Hello"; String S2 = "Hello"; String S3 = "Hell" + "O"; System.out.println (S1 == S2); System.out.println (S1 == S3); // Работа как +, подстроение на строке Создание нового. Строка S4 = "ад"; Строка S5 = S4 + "O"; System.out.println (S1 == S5); System.out.println (s1.equals (s5)); // подстроение имеет специальную рукоятку по подстроению (0) строки s6 = s1.substring (0); System.out.println (S1 == S6); }Проверьте байткоды S1, S2, S3:
0: LDC #16; // Строка привет
2: Store_1
3: LDC #16; // Строка привет
5: Store_2
6: LDC #16; // Строка привет
8: Store_3
Проверьте байткоды S4 и S5:
41: LDC #30; // Строка ада
43: Магазин 4
45: новый #32; // класс java/lang/stringbuilder
48: DUP
49: Aload 4
51: Invokestatic #34; // метод java/lang/string.valueof: (ljava/lang/object;) ljava/lang/string;
54: INLOKSECIAL #40; // Метод java/lang/stringbuilder
57: LDC #43; // строка o
59: Invokevirtual #45; // метод java/lang/stringbuilder.append: (ljava/lang/string;) ljava/lang/stringbuilder;
62: Invokevirtual #49; // метод java/lang/stringbuilder.tostring :() ljava/lang/string;
Обратите внимание, что метод подстроения, подстроение (0,3)-это строка, которая получает от символов от 0 до 2. Причина этой конструкции может заключаться в том, что легко рассчитать длину подстроения, 3-0 = 3. В то же время, подстроение имеет специальную обработку оптимизации для специальных параметров:
public String substring (int beginindex, int endindex) {if (beginIndex <0) {бросить новый stringIndexoutOfBoundSexception (beginIndex); } if (endidex> count) {бросить новый stringIndexoutOfBoundSexception (endIndex); } if (beginIndex> endIndex) {бросить новый stringIndexoutOfBoundSexception (endIndex - beginIndex); } return ((beginindex == 0) && (endindex == count))? это: новая строка (Offset + BeginIndex, Endindex - BeginIndex, значение); } Из этого мы можем видеть, что за струнным объектом нет ничего волшебного, и иметь некоторое понимание байт -кода может лучше понять это.
На самом деле, в постоянном пуле хранится много информации о классах и методах, таких как имена пакетов, названия классов, подписи метода и т. Д. Если вам интересно, вы можете провести углубленные исследования.