내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
C 언어를 배우면서 문자열을 접한 적이 있을 것 같은데, C 언어에서는 문자열만 사용할 수 있습니다.
문자 배열 char[10] str = “hello”; 또는 문자 포인터 char *str = “hello”;전용 String 클래스가 제공되지 않습니다. . 객체 지향 Java에서는 String 클래스와 해당 작업이 특별히 제공되므로 프로그래머가 사용하기가 더 편리합니다.
문자열의 내용은 변경할 수 없습니다.
문자열에서 문자열 내용 수정 가능성과 관련된 모든 작업은 새 객체를 생성하며 변경되는 것은 새 객체입니다.
예를 들어 하위 문자열을 검색하는 경우:
어떤 사람들은 다음과 같이 말합니다. 문자열 안에 문자를 저장하는 배열이 final에 의해 수정되어 변경할 수 없기 때문에 문자열은 불변입니다.
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
}
문자열은 참조 데이터 유형이며 문자열 자체를 저장하지 않습니다.
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 = "첫 번째";
JVM(Java Virtual Machine)은 먼저 문자열 상수 풀에 "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) | -1을 반환하지 않고 ch가 처음 나타나는 위치를 반환합니다. |
int indexOf(int ch, intfromIndex) | fromIndex 위치부터 시작하여 ch가 처음 나타나는 위치를 찾고, -1을 반환합니다. |
int indexOf(문자열 str) | -1을 반환하지 않고 str이 처음 나타나는 위치를 반환합니다. |
int indexOf(문자열 str, intfromIndex) | -1을 반환하지 않고 fromIndex 위치부터 시작하여 str의 첫 번째 발생을 찾습니다. |
int lastIndexOf(int ch) | 뒤에서 앞으로 검색하여 ch가 처음 나온 위치로 돌아가고, 그렇지 않으면 -1을 반환합니다. |
int lastIndexOf(int ch, intfromIndex) | fromIndex 위치부터 검색을 시작하고 ch가 처음 나타나는 위치를 뒤에서 앞으로 검색하면 -1이 반환되지 않습니다. |
int lastIndexOf(문자열 str) | 뒤에서 앞으로 검색하여 str이 처음 나타나는 위치를 반환합니다. -1은 반환되지 않습니다. |
int lastIndexOf(문자열 str, intfromIndex) | fromIndex 위치부터 검색을 시작하고, str이 처음 나타나는 위치를 뒤에서 앞으로 검색합니다. No -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, 즉 341ms에 불과합니다. 수정하려면 StringBuffer 또는 StringBuilder를 사용하는 것이 좋습니다.
문자열의 변경이 불가능한 특성으로 인해 문자열 수정을 용이하게 하기 위해 Java는 StringBuilder 및 StringBuffer 클래스도 제공합니다. 그리고 이 두 클래스의 메소드는 대부분 동일합니다.
관심있으시면 클릭해주세요온라인 문서
StringBuffer 사용 후 1ms.
참고: String 및 StringBuilder 클래스는 직접 변환할 수 없습니다. 서로 변환하려면 다음 원칙을 사용할 수 있습니다.
소위 스레드 안전은 여러 사람이 화장실에 갈 때와 같습니다. 이때 먼저 들어가서 문을 닫고 끝나면 나옵니다. 이 기간 동안에는 이 방을 단독으로 사용하게 되며 누구도 들어갈 수 없습니다. 현재 작업을 먼저 완료하고, 자원을 독점하고, 완료 후 점유된 자원을 해제합니다.