τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
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
}
Η συμβολοσειρά είναι ένας τύπος δεδομένων αναφοράς και δεν αποθηκεύει την ίδια τη συμβολοσειρά.
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) θα ελέγξει πρώτα εάν η συμβολοσειρά "πρώτα" υπάρχει ήδη στη συγκέντρωση σταθερών συμβολοσειρών. Εάν υπάρχει, η αναφορά της συμβολοσειράς στο σταθερό pool επιστρέφεται απευθείας, εάν δεν υπάρχει, η συμβολοσειρά προστίθεται στη συγκέντρωση σταθερών και επιστρέφεται η αναφορά της στη συγκέντρωση σταθερών.
//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(int index) | Επιστρέφει τον χαρακτήρα στη θέση του ευρετηρίου Εάν ο δείκτης είναι αρνητικός ή εκτός ορίων, δημιουργείται μια εξαίρεση IndexOutOfBoundsException. |
int indexOf(int ch) | Επιστρέφει τη θέση όπου εμφανίζεται για πρώτη φορά το ch, χωρίς να επιστρέφει -1 |
int indexOf(int ch, intfromIndex) | Ξεκινήστε από τη θέση fromIndex για να βρείτε τη θέση όπου εμφανίζεται για πρώτη φορά το ch και επιστρέψτε -1 |
int indexOf(String str) | Επιστρέφει τη θέση όπου εμφανίζεται για πρώτη φορά το str, χωρίς να επιστρέφει -1 |
int indexOf(String str, intfromIndex) | Βρείτε την πρώτη εμφάνιση του str ξεκινώντας από τη θέση fromIndex, χωρίς να επιστρέψετε -1 |
int lastIndexOf(int ch) | Αναζητήστε από πίσω προς τα εμπρός, επιστρέψτε στη θέση όπου εμφανίζεται για πρώτη φορά το ch, αν όχι επιστροφή -1 |
int lastIndexOf(int ch, intfromIndex) | Ξεκινήστε την αναζήτηση από τη θέση fromIndex και αναζητήστε από πίσω προς τα εμπρός για τη θέση όπου το ch εμφανίζεται για πρώτη φορά. |
int lastIndexOf(String str) | Αναζητήστε από πίσω προς τα εμπρός και επιστρέψτε τη θέση όπου εμφανίζεται για πρώτη φορά η str -1. |
int lastIndexOf(String str, intfromIndex) | Ξεκινήστε την αναζήτηση από τη θέση fromIndex και αναζητήστε από πίσω προς τα εμπρός τη θέση όπου εμφανίζεται για πρώτη φορά η str. |
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
μέθοδος | Λειτουργία |
---|---|
Συμβολοσειρά αντικατάστασηΌλων (Regex συμβολοσειράς, Αντικατάσταση συμβολοσειράς) | Αντικαταστήστε όλο το καθορισμένο περιεχόμενο |
Αντικατάσταση συμβολοσειράςFirst (regex συμβολοσειράς, αντικατάσταση συμβολοσειράς) | Αντικαταστήστε το πρώτο περιεχόμενο |
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 regex) | Διαχωρίστε όλες τις χορδές |
Διαχωρισμός συμβολοσειράς[] (Regex συμβολοσειράς, όριο 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.
Λόγω της αμετάβλητης φύσης του String, προκειμένου να διευκολυνθεί η τροποποίηση των συμβολοσειρών, η Java παρέχει επίσης κλάσεις StringBuilder και StringBuffer. Και οι περισσότερες από τις μεθόδους αυτών των δύο τάξεων είναι ίδιες.
Εάν ενδιαφέρεστε, κάντε κλικΗλεκτρονική τεκμηρίωση
1 ms μετά τη χρήση του StringBuffer.
Σημείωση: Οι κλάσεις String και StringBuilder δεν μπορούν να μετατραπούν απευθείας. Εάν θέλετε να μετατρέψετε ο ένας τον άλλον, μπορείτε να υιοθετήσετε τις ακόλουθες αρχές:
Η λεγόμενη ασφάλεια κλωστών είναι όπως όταν πολλά άτομα πηγαίνουν στην τουαλέτα Αυτή τη στιγμή, μπαίνεις μέσα, κλείνεις την πόρτα και βγαίνεις έξω. Κατά τη διάρκεια αυτής της περιόδου, έχετε αυτό το δωμάτιο για τον εαυτό σας και κανείς δεν μπορεί να μπει. Ολοκληρώστε πρώτα την τρέχουσα εργασία, μονοπωλήστε τους πόρους και, στη συνέχεια, απελευθερώστε τους κατειλημμένους πόρους μετά την ολοκλήρωση.