моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Я думаю, вы, ребята, сталкивались со строками, когда изучали язык C, но на языке C вы можете использовать только
Массив символов char[10] str = «привет» или указатель символа char *str = «привет»;Специальный класс String не предусмотрен. . В объектно-ориентированной Java специально предусмотрен класс String и его операции, что удобнее для использования нашими программистами.
Содержимое строки не может быть изменено.
В String все операции, включающие возможность изменения содержимого строки, создают новый объект, и то, что изменяется, является новым объектом.
Например, при поиске подстрок:
Некоторые люди говорят: строки неизменяемы, потому что массив, хранящий символы внутри них, модифицируется финалом и, следовательно, не может быть изменен.
public static void main(String[] args) {
final char[] arr = {'h','e','l','l','o'};
arr[0] = 'H';
System.out.println(String.valueOf(arr));//Hello
// arr = new char[]{'h','o'};Error
}
String является ссылочным типом данных и не хранит саму строку.
public class Test {
public static void main(String[] args) {
//1.直接赋值
String s1 = "first";
//2.new 对象
String s2 = new String("second");
//3. 创建字符数组
char[] arr = {'t','h','i','r','d'};
String s3 = new String(arr);
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
}
}
Уведомление:
Строка s1 = «первый»;
Виртуальная машина Java (JVM) сначала проверит, существует ли строка «first» уже в пуле строковых констант. Если она существует, ссылка на строку в пуле констант возвращается напрямую; если она не существует, строка добавляется в пул констант и возвращается ее ссылка в пуле констант.
//s1 s2 分别是new 一个新的字符串"hello"
String s1 = new String("hello");
String s2 = new String("hello");
String s3 = "Hello";
String s4 = s1;
System.out.println(s1 == s2);//false
System.out.println(s1 == s4);//true
System.out.println(s1 == s3);//false
//因为Object类中的equals()方法是==实现的,完成不了String类的需求,
//所以String对equals()实现了重写
String s1 = new String("hello");
String s2 = new String("hello");
String s3 = "Hello";
String s4 = s1;
System.out.println(s1.equals(s2));//true
System.out.println(s1.equals(s4));//true
System.out.println(s1.equals(s3));//false
3. CompareTo() сравнивает в лексикографическом порядке, возвращаемое значение — int
/*
* 比较的方式有一下两种:
* 1.先一个一个字符相比较,如果出现不同的字符,则返回差值
* 2.如果前x个字符相等,则返回两个字符串的长度差值
* */
String s1 = new String("abc");
String s2 = new String("abcdef");
String s3 = new String("abd");
String s4 = new String("abc");
System.out.println(s1.compareTo(s2));//-3 (3-6)
System.out.println(s1.compareTo(s3));//-1
System.out.println(s1.compareTo(s4));//0
String s1 = new String("Abc");
String s2 = new String("aBcdef");
String s3 = new String("aBd");
String s4 = new String("ABc");
System.out.println(s1.compareToIgnoreCase(s2));//-3 (3-6)
System.out.println(s1.compareToIgnoreCase(s3));//-1
System.out.println(s1.compareToIgnoreCase(s4));//0
метод | Функция |
---|---|
char charAt(целый индекс) | Возвращает символ в позиции индекса. Если индекс отрицательный или выходит за пределы, создается исключение IndexOutOfBoundsException. |
int indexOf(int ch) | Возвращает позицию, где впервые появляется ch, не возвращая -1. |
int indexOf(int ch, intfromIndex) | Начните с позиции fromIndex, чтобы найти позицию, где впервые появляется ch, и верните -1. |
int indexOf(Строка str) | Возвращает позицию, где впервые появляется строка, не возвращая -1 |
int indexOf(Строка str, intfromIndex) | Найдите первое вхождение str, начиная с позиции fromIndex, не возвращая -1. |
int lastIndexOf(int ch) | Поиск сзади вперед, вернитесь к позиции, где впервые появляется ch, если нет, верните -1 |
int lastIndexOf(int ch, intfromIndex) | Начните поиск с позиции fromIndex и выполните поиск сзади вперед, чтобы найти позицию, в которой ch -1 не возвращается. |
int lastIndexOf(Строка str) | Выполните поиск сзади вперед и верните позицию, в которой строка появляется впервые. -1 не возвращается. |
int lastIndexOf(Строка str, intfromIndex) | Начните поиск с позиции fromIndex и найдите позицию, в которой строка впервые появляется, начиная с номера -1. |
public static void main(String[] args) {
String s = "Hello, how are you today?";
System.out.println(s.charAt(2)); //l
System.out.println(s.indexOf('H')); //0
System.out.println(s.indexOf('l',2)); //从第二个开始找 2
System.out.println(s.indexOf("are")); //11
System.out.println(s.indexOf("are",12)); // 未找到-1
System.out.println(s.lastIndexOf('l')); //从后往前数 3
System.out.println(s.lastIndexOf('l',3));// 从第三个往后数 3
System.out.println(s.lastIndexOf("how"));// 7
System.out.println(s.lastIndexOf("how",6));// 未找到 -1
}
1. Преобразование чисел и строк
String s1 = String.valueOf(1234);
String s2 = String.valueOf(12.34);
String s3 = String.valueOf(true);
String s4 = String.valueOf(new Student("Hanmeimei", 18));
System.out.println(s1);//1234 String
System.out.println(s2);//12.34 String
System.out.println(s3);//true String
System.out.println(s4);//Student@1b6d3586
System.out.println("=================================");
int data1 = Integer.parseInt("1234");
double data2 = Double.parseDouble("12.34");
System.out.println(data1);//1234
System.out.println(data2);//12.34
2. Преобразование корпуса
String s1 = "hello";
String s2 = "HELLO";
System.out.println(s1.toUpperCase());//HELLO
System.out.println(s1.toLowerCase());//hello
3. Из строки в массив символов и из массива символов в строку.
//字符串转字符数组
String s = "What can I say!";
char[] arr = s.toCharArray();
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
System.out.println();
//字符数组转字符串
String s1 = new String(arr);
System.out.println(s1);
4.Форматирование
//格式化
String s = String.format("%d/%02d/%d",2024,07,10);
System.out.println(s);//2024/07/10
метод | Функция |
---|---|
String replaceAll(регулярное выражение строки, замена строки) | Заменить весь указанный контент |
String replaceFirst(регулярное выражение строки, замена строки) | Заменить первый контент |
String s = "What can I say say!";
System.out.println(s.replaceAll("say","look"));
System.out.println(s.replaceFirst("say","SAY"));
//What can I look look!
//What can I SAY say!
метод | Функция |
---|---|
String[] split(регулярное выражение строки) | Разделить все строки |
String[] split(регулярное выражение строки, ограничение int) | Разделить строку на группы лимитов в указанном формате. |
//字符串拆分
String s = "字 符 串 拆 分";
String[] str = s.split(" ");
for(String i : str) {
System.out.print(i+"|");
}
System.out.println();
String[] str2 = s.split(" ",2);
for(String i : str2) {
System.out.println(i);
}
/*
* 输出:
字|符|串|拆|分|
字
符 串 拆 分
* */
/*
*拆分是特别常用的操作:
* 一定要重点掌握
*另外有些特殊字符(通配符)作为分割符可能无法正确切分, 需要加上转义.
* */
String s2 = "192.168.1.16" ;
String[] result = s2.split("\.") ;
for(String i: result) {
System.out.println(i);
}
System.out.println("\");
//为了匹配字面上的点号,你需要使用反斜杠()来转义它,
// 但在Java字符串中,反斜杠本身也是一个转义字符,
// 所以你需要使用双反斜杠(\)来表示一个字面量上的反斜杠。
//字符串截取
String s = "What can I say!";
System.out.println(s.substring(6));//an I say!
System.out.println(s.substring(0,3));//What
String s = " yy ds ";
System.out.println(s.trim());//yy ds
Класс String нельзя изменить. Все модификации приведут к созданию новых объектов, что неэффективно.
Это всего лишь 10000, что составляет 341 мс. Если вы хотите изменить его, рекомендуется использовать StringBuffer или StringBuilder.
Из-за неизменяемой природы String, чтобы облегчить модификацию строк, Java также предоставляет классы StringBuilder и StringBuffer. И большинство методов этих двух классов одинаковы.
Если вы заинтересованы, пожалуйста, нажмитеОнлайн-документация
1 мс после использования StringBuffer.
Примечание. Классы String и StringBuilder нельзя преобразовать напрямую. Если вы хотите обратить друг друга, вы можете принять следующие принципы:
Так называемая потокобезопасность аналогична ситуации, когда несколько человек идут в туалет. В это время есть только одна комната. Вы сначала заходите, закрываете дверь и выходите после того, как закончили. В течение этого периода эта комната принадлежит только вам, и никто не может войти. Сначала завершите текущую задачу, монополизируйте ресурсы, а затем после завершения освободите занятые ресурсы.