تقدم هذه المقالة الأسئلة العشرة الأكثر شيوعًا حول السلسلة في Java:
1. لمقارنة السلسلة، هل يجب عليك استخدام "==" أو يساوي ()؟
ببساطة، "==" يحدد ما إذا كان هناك مرجعان يشيران إلى نفس عنوان الذاكرة (نفس الكائن الفعلي).
ويحدد يساوي ما إذا كانت قيم السلسلتين متساوية.
ما لم تكن ترغب في تحديد ما إذا كان مرجعا السلسلة هما نفس الكائن أم لا، فيجب عليك دائمًا استخدام طريقة يساوي ().
سوف تفهم هذه المشكلة بشكل أفضل إذا فهمت تدريب السلسلة
2. بالنسبة للمعلومات الحساسة، لماذا من الأفضل استخدام char[] بدلاً من String؟
السلسلة هي كائن غير قابل للتغيير، مما يعني أنه بمجرد إنشائه، لا يمكن تغيير الكائن بأكمله. حتى لو اعتقد المبتدئ أن مرجع السلسلة قد تغير، فهو في الواقع مجرد مرجع (مؤشر) يشير إلى كائن آخر (جديد).
يمكن للمبرمجين تعديل مصفوفة الأحرف بشكل صريح، بحيث لا يتم كشف المعلومات الحساسة (مثل كلمات المرور) بسهولة في أي مكان آخر (طالما قمت بتعيين char[] على 0 بعد الاستخدام).
3. هل تستخدم السلسلة كحالة حالة في بيان التبديل؟
بدءًا من JDK7، هذا ممكن بالمناسبة، Java 6 والإصدارات السابقة لا تدعم هذا.
انسخ رمز الكود كما يلي:
// صالح فقط في Java 7 وما فوق!
التبديل (str.toLowerCase()) {
الحالة "أ":
القيمة = 1؛
استراحة؛
الحالة "ب":
القيمة = 2؛
استراحة؛
}
4. تحويل السلسلة إلى رقم
بالنسبة للأعداد الكبيرة جدًا، يرجى استخدام الرمز الطويل، وهو كما يلي
انسخ رمز الكود كما يلي:
int age = Integer.parseInt("10");
long id = Long.parseLong("190"); // إذا كانت القيمة كبيرة.
5. كيفية تقسيم السلسلة بواسطة أحرف المسافات البيضاء
سيتم تحليل السلسلة المستلمة بواسطة طريقة تقسيم السلسلة () كتعبير عادي.
يمثل "/ s" أحرفًا فارغة، مثل المسافة " "، وعلامة التبويب "/t"، وتغذية السطر "/n"، وحرف الإرجاع "/ r".
عندما يقوم المترجم بتحليل الكود المصدري، فإنه سيقوم أيضًا بإجراء التحويل الحرفي، لذلك هناك حاجة إلى "//s".
انسخ رمز الكود كما يلي:
String[] strArray = aString.split("//s+");
6. كيف تتم معالجة طريقة السلسلة الفرعية () داخليًا؟
في JDK6، لا تزال طريقة substring() تشارك مصفوفة char[] الأصلية وتقوم بإنشاء سلسلة "جديدة" من خلال الإزاحة والطول.
إذا كنت تريد أن تحصل السلسلة الفرعية () على كائن تم إنشاؤه حديثًا، فاستخدم الطريقة التالية:
انسخ رمز الكود كما يلي:
String sub = str.substring(start, end) + "";
بالطبع، في Java 7، تقوم السلسلة الفرعية () بإنشاء مصفوفة char[] جديدة بدلاً من مشاركتها.
لمعرفة المزيد، يرجى الرجوع إلى: طريقة substring() واختلافاتها في JDK6 وJDK7
7. String vs StringBuilder vs StringBuffer
StringBuilder قابل للتغيير، لذا يمكن تعديل القيم الداخلية بعد الإنشاء.
تتم مزامنة StringBuffer وبالتالي فهي آمنة للترابط، ولكنها أقل كفاءة نسبيًا.
8. كيفية لصق نفس السلسلة بشكل متكرر؟
الخيار 1: استخدم فئة الأداة المساعدة StringUtils الخاصة بمكتبة Apache Commons Lang.
انسخ رمز الكود كما يلي:
سلسلة str = "abcd";
السلسلة المتكررة = StringUtils.repeat(str,3);//abcdabcdabcd
الخيار 2:
استخدم منشئ StringBuilder أكثر مرونة.
انسخ رمز الكود كما يلي:
سلسلة src = "الاسم";
int len = src.length();
تكرار كثافة العمليات = 5؛
StringBuilder builder = new StringBuilder(len * Repeat);
ل(int i=0;i<repeat;i++){
builder.append(src);
}
String dst = builder.toString();
9. كيفية تحويل السلسلة إلى تاريخ؟
انسخ رمز الكود كما يلي:
تنسيق SimpleDateFormat = جديد SimpleDateFormat("yyyy-MM-dd");
سلسلة str = "07/11/2013";
تاريخ التاريخ = format.parse(str);
System.out.println(format.format(date));//2013-11-07
10. كيف نحسب عدد مرات ظهور حرف معين؟
أيضًا باستخدام فئة مكتبة Apache Commons Lang StringUtils:
انسخ رمز الكود كما يلي:
int n = StringUtils.countMatches("11112222", "1");
System.out.println(n);