على الرغم من أن Java تطورت على أساس C ++ ، فقد تحسن العديد من أوجه القصور في C ++. أحد الأشياء التي يجب ذكرها هو سلاسل. نحن نعلم أنه مع تعميق التعلم ، عند إدخال MFC ، عند معالجة السلاسل أو الأحرف ، غالبًا ما تحتاج إلى استخدام الماكرو _T () لتحويل الأحرف أو الأوتار إلى نوع Unicode. خلاف ذلك ، سيحدث خطأ أثناء المعالجة. في Java ، فإن الحرف char أو الشخصيات المخزنة في فئة الأحرف ليس بايت واحد ، ولكن 2 بايت. يتم استخدام Unicode ، وهو دعم جميع الشخصيات في العالم.
يشكل تسلسل الأحرف سلسلة ، وهناك نوعان من الأوتار: أحدهما ثابت سلسلة لا تحتاج إلى تعديلها بعد الإنشاء ، والتي تسمى سلسلة ثابتة. في Java ، يتم تخزينه باستخدام فئة السلسلة ؛
واحد هو متغير سلسلة يجب تعديلها بعد الإنشاء ، يسمى متغير السلسلة. في Java ، يتم تشغيله وإدارته باستخدام فئة StringBuffer.
فئة StringBuffer
1. إنشاء كائن فئة stringBuffer
يمثل كائن فئة StringBuffer متغير سلسلة (لاحظ أنه "متغير"). كل كائن فئة stringBuffer هو متغير سلسلة يمكن توسيعها وتعديلها. فيما يلي مُنشئات فئة StringBuffer شائعة الاستخدام:
(1) StringBuffer ()
قم بإنشاء كائن فارغ جديد من فئة StringBuffer ، مع ضبط القيمة الأولية لسعةها على 16 حرفًا (لاحظ أنه 16 حرفًا)
(2) StringBuffer العام (طول int)
قم بإنشاء كائن stringbuffer فارغ جديد ، يتم تعيين قيمته الأولية على أحرف الطول
(3) StringBuffer (String Str)
قم بإنشاء كائن stringbuffer جديد ، محتوىه هو محتوى STR ، ويتم ضبط السعة على طول STR وإضافة 16 حرفًا (ملاحظة: إضافة 16 حرفًا)
2. الطرق الشائعة لكائن فئة StringBuffer
(1) امتداد كائن فئة StringBuffer
توفر فئة StringBuffer مجموعتين من الطرق لتوسيع الأحرف الموجودة في كائن StringBuffer ، وهما:
1) إلحاق السلسلة العامة
(كائن OBJ)
يتم استخدام طريقة الإلحاق لتوسيع الأحرف الموجودة في كائن StringBuffer. بعد تحويل كائن المعلمة المحدد إلى سلسلة ، قم بإلحاقه بعد كائن StringBuffer الأصلي ، ويعيد كائن StringBuffer الجديد. يمكن أن تكون كائنات المعلمة الإضافية من أنواع البيانات المختلفة ، مثل int ، char ، string ، double ، إلخ.
2) إدراج StringBuffer العام (
إدراج إدراج إدراج الموضع ، نوع كائن المعلمة ، اسم كائن المعلمة)
تقوم هذه الطريقة بتحويل كائن المعلمة المحدد إلى سلسلة ، وإدراجها في الموضع المحدد في كائن StringBuffer الأصلي ، ويعيد كائن StringBuffer الجديد.
(2) طول وقدرة كائن فئة StringBuffer
يشير طول كائن فئة StringBuffer إلى عدد الأحرف التي يحتوي عليها ؛ تشير السعة إلى عدد مساحة الأحرف المخصصة.
1) طول الباحث العام ()
تقوم هذه الطريقة بإرجاع عدد الأحرف الواردة في كائن فئة StringBuffer الحالي.
2) السعة العامة العامة ()
تقوم هذه الطريقة بإرجاع عدد مساحة الأحرف المخصصة بواسطة كائن فئة StringBuffer الحالي.
(3) تعديل كائن فئة StringBuffer
setcharat public void (intindex ، chearch)
تحل هذه الطريقة محل الحرف في موضع الفهرس في كائن StringBuffer الحالي مع الحرف المحدد CH.
(4) تعيين وإضافة السلاسل
السلاسل هي أنواع البيانات التي غالبا ما تستخدم في البرامج. يتم تقديم تعيين وإضافة السلاسل في نظام تجميع Java.
(5) طرق أخرى مماثلة لتلك الموجودة في فئة السلسلة
3. استخدم فئة StringTokenizer لتحلل السلاسل
توجد فئة StringTokenizer في حزمة Java.Util ، وعند استخدام هذه الفئة ، تتم إضافتها في بداية البرنامج.
importjava.util.stringTokenizer أو
importjava.util.*
فئة StringTokenizer
بالنسبة لفئة StringTokenizer ، فإن وظيفتها الرئيسية هي تقسيم السلسلة وفقًا للحرف المقسم المحدد ، وتشبه وظيفتها طريقة الانقسام لفئة السلسلة
1. مُنشئ فئة StringTokenizer
(1) StringTokenizer (StringStr)
قم بإنشاء كائن stringtokenizer لـ String String STR ، الذي يتم تعيين محدده على "/t/n/r/f" ، أي: الفضاء ، علامة التبويب الأفقية ، كسر الخط ، عودة النقل ، حرف الجدول
(2) StringTokenizer (String Str ، String Delim)
قم بإنشاء كائن stringTokenizer لـ String String STR ، الذي يكون محدده هو الحكم المحدد ، ولا يحتوي على محدد افتراضيًا.
3) StringTokenizer (String Str ، String Delim ، Boolean ReturnDelims)
قم بإنشاء كائن stringTokenizer لسلسلة المعينة التي يتم تحديدها هي حذف السلسلة المحددة. إذا كانت ReturnDelims صحيحة ، فإن كل سلسلة في كائن StringTokenizer تم إنشاؤها تحتوي على محدد ، وإلا فإنها لا تحتوي على محدد.
2. الطرق الشائعة لفئة stringtokenizer
Nintcounttokens ()
إرجاع عدد عمليات التسليح في كائن StringTokenizer بعد الانقسام
nbooleanhasmoreelements ()
وظيفة هذه الطريقة هي نفس طريقة Hasmoretokens ()
nbooleanhasmoretokens ()
اكتشف ما إذا كان كائن StringTokenizer يحتوي على فرعية مقسمة. إذا كان الأمر كذلك ، فسوف يعود صحيحًا ، وإلا فإنه سيعود خطأ.
ObjectNextElement ()
هذه الطريقة لها نفس وظيفة NextToken (). الفرق الرئيسي هو أنه لا يعيد كائن سلسلة ، ولكن كائن كائن
StringNextToken ()
إرجاع الفرعية المقسمة التالية في كائن StringTokenizer
StringNextToken (سلسلة DELIM)
إرجاع الفرعية المقسمة التالية في كائن StringTokenizer ، ولكن يتم إعادة تعيين المحدد إلى DELIM
حقيقة تسعة ، في بعض لغات البرمجة ، مثل C ، تتكون السلسلة من صفائف أحرف ، ويتم وضع علامة على نهاية كل سلسلة "/0" ، ولكن هذا ليس هو الحال في Java.
Nin Java ، عادة ما توجد سلاسل ككائنات من فئة السلسلة ، مثل: Strings = "أحب Java!" ، حيث "أحب Java!" هو كائن.
لذلك ، تختلف الأوتار ومصفوفات الشخصيات في جافا تمامًا ، وهي تختلف أيضًا عن الأوتار في C!
طلب تسعة لتسهيل تحويل صفائف السلسلة والحرمان ، يتم توفير العديد من هذه المنشآت والأساليب في فئة السلسلة
N ، مثل سلسلة مُنشئ (قيمة char [])
طريقة tchararray ()
قيمة طريقة (char [] بيانات)
حمام سباحة ثابت
بالنسبة إلى ثوابت السلسلة التي تظهر في برنامج المصدر ، عندما يتم تشغيل البرنامج ، سيتم حفظها في مجموعة ثابتة لذاكرة التخزين المؤقت.
إن مقارنة المتغيرات التي تشير إلى هذه الأوتار المخزنة في التجمعات الثابتة ستحصل أيضًا على النتيجة الصحيحة مع ==.
ومع ذلك ، في وقت التشغيل ، ستنتج عمليات مختلفة على سلاسل مثل +، والفرعية ، وما إلى ذلك ، كائنات سلسلة جديدة.
لكن المترجمين الأقوياء سيقومون بتحسين خياطة ثوابت السلسلة ، مثل عندما يكون S3 = "Hell" + "O" ، سيظل S3 يشير إلى السلسلة في التجمع الثابت. ومع ذلك ، بالنسبة للعمليات المتغيرة ، من المستحيل طلب أداء الجهاز الظاهري مثل S1 + S2 وتحديد ما إذا كانت النتيجة موجودة بالفعل في المجموعة الثابتة. لذلك ، استخدم متساويًا بدلاً من == لتحديد ما إذا كانت سلسلتان متساوية.
يتم وضع ثوابت الفراغ الثابتة العامة (سلسلة [] args) {// String Contrants في مجموعة ثابتة. السلسلة S1 = "Hello" ؛ السلسلة S2 = "Hello" ؛ السلسلة S3 = "Hell" + "O" ؛ System.out.println (S1 == S2) ؛ System.out.println (S1 == S3) ؛ // عملية مثل +، Subcring on String إنشاء واحدة جديدة. سلسلة S4 = "الجحيم" ؛ السلسلة S5 = S4 + "O" ؛ System.out.println (S1 == S5) ؛ system.out.println (s1.equals (s5)) ؛ // Substring له مقبض خاص على السلسلة الفرعية (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
اختبار bytecodes من S4 و S5:
41: LDC #30 ؛ // سلسلة الجحيم
43: المتجر 4
45: جديد #32 ؛ // Class Java/Lang/StringBuilder
48: DUP
49: Aload 4
51: Invokestatic #34 ؛ // طريقة java/lang/string.valueof: (ljava/lang/object ؛) ljava/lang/string ؛
54: Invokespecial #40 ؛ // الطريقة java/lang/stringbuilder
57: LDC #43 ؛ // string 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. في الوقت نفسه ، يتمتع Sentring بمعالجة تحسين خاصة للمعلمات الخاصة:
السلسلة العامة Substring (int bathindex ، int endIndex) {if (begrenindex <0) {رمي new StringIndExOutofBoundSexception (stablyendex) ؛ } if (endIndex> count) {رمي new StringIndExOutOfBoundSexception (endIndex) ؛ } if (begrenindex> endIndex) {رمي new StringIndExOutOfBoundSexception (endIndex - stablindex) ؛ } return ((Begrenindex == 0) && (endIndex == count))؟ هذا: سلسلة جديدة (Offset + BeginIndex ، EndIndex - Beathindex ، value) ؛ } من هذا يمكننا أن نرى أنه لا يوجد شيء سحر وراء كائن السلسلة ، وأن وجود بعض الفهم من رمز Bytecode يمكن أن يفهمه بشكل أفضل.
في الواقع ، يتم تخزين الكثير من المعلومات حول الفصول والأساليب في المجموعة الثابتة ، مثل أسماء الحزم وأسماء الفصول الدراسية وتوقيعات الأسلوب ، وما إلى ذلك إذا كنت مهتمًا ، فيمكنك إجراء أبحاث متعمقة.