Java دالة تقسيم السلسلة النصية () مع مثال

⚡ ملخص ذكي

تقسيم سلسلة في Java باستخدام دالة split()، التي تقسم النص عند كل فاصل وتعيد الأجزاء كمصفوفة نصية. يوجد وسيط اختياري يُحدد عدد الأجزاء المُنتجة، مع ترك الباقي كما هو.

  • 🧩 نوع الإرجاع: تقوم الدالة split() بإرجاع String[]، وليس سلسلة نصية واحدة أبدًا، لذلك يجب تعيين النتيجة إلى مصفوفة.
  • 🔤 الفاصل هو تعبير نمطي: الوسيط عبارة عن تعبير نمطي، لذا فإن الأحرف مثل النقطة والخط العمودي تحتاج إلى علامة الهروب (esca).ping.
  • 🔢 حد الوسيط: يؤدي تجاوز حد 3 إلى إنتاج جزأين منفصلين مع الاحتفاظ ببقية النص كعنصر نهائي.
  • ␣ نمط المسافات البيضاء: يتطابق النمط \\s مع أي حرف مسافة بيضاء واحد، والذي يقسم الجملة إلى كلمات.
  • 🕳️ الفراغات اللاحقة: يتم تجاهل الحقول الفارغة في نهاية البيانات ما لم يتم تحديد حد سلبي.
  • 🔁 نتائج القراءة: تقوم حلقة التكرار القياسية على طول المصفوفة بطباعة كل جزء بالترتيب.

Java طريقة تقسيم السلسلة ().

ما هي السلسلة المقسمة () في Java?

استخدم split() تتيح لك هذه الطريقة كسر سلسلة على أساس معين Java فاصل السلسلة. في أغلب الأحيان يكون الفاصل عبارة عن مسافة أو فاصلة (,) التي تريد عندها تقسيم السلسلة.

صيغة الدالة سبليت ().

public String[] split(String regex)
public String[] split(String regex, int limit)

⚠️ ملاحظة حول نوع الإرجاع: split() إرجاع String[] مجموعة، ليس واحدا Stringإسناد النتيجة إلى مستوى عادي String يفشل المتغير في التجميع بسبب خطأ في أنواع البيانات غير المتوافقة، وهو الخطأ الأكثر شيوعًا الذي يرتكبه المبتدئون مع هذه الطريقة.

معامل

  • التعبير النمطي: التعبير النمطي المطبق على النص أو السلسلة.
  • الحد: الحد الأقصى لعدد القيم في المصفوفة الناتجة. إذا تم حذفه أو كان صفرًا، فسيتم إرجاع كل سلسلة فرعية تطابق التعبير النمطي.

كيفية تقسيم سلسلة في Java مع الفاصل

يوضح المثال أدناه كيفية تقسيم سلسلة نصية Java مع فاصل.

لنفترض أن لدينا متغير سلسلة اسمه strMain تتكون من بضع كلمات - ألفا، بيتا، جاما، Delta، سيجما - جميعها مفصولة بفاصلة (,).

 تقسيم سلسلة في Java

هنا، إذا أردنا جميع السلاسل الفردية، فإن أفضل نمط ممكن هو تقسيمها على أساس الفاصلة. لذلك سوف نحصل على خمس سلاسل منفصلة على النحو التالي:

  • ألفا
  • النسخة
  • غاما
  • Delta
  • سيجما

استخدم السلسلة انقسم الطريقة في Java قم بتقسيم السلسلة النصية التي تحتاج إلى تقسيم، وقم بتوفير الفاصل كوسيط.

في هذا Java تقسيم السلسلة حسب حالة المحدد، والفاصل عبارة عن فاصلة (،) ونتيجة Java ستؤدي عملية تقسيم السلسلة بواسطة الفاصلة إلى إعطائك تقسيمًا للمصفوفة.

class StrSplit{
  public static void main(String []args){
   String strMain = "Alpha, Beta, Delta, Gamma, Sigma";
    String[] arrSplit = strMain.split(", ");
    for (int i=0; i < arrSplit.length; i++)
    {
      System.out.println(arrSplit[i]);
    }
  }
}

الحلقة الموجودة في الكود تطبع كل منها فقط Java قم بفصل السلسلة من المصفوفة بعد دالة الفصل في Java، كما هو مبين أدناه.

الناتج المتوقع:

Alpha
Beta
Delta
Gamma
Sigma

على سبيل المثال: Java طريقة تقسيم السلسلة () مع التعبير العادي والطول

لنفترض أنك تحتاج فقط إلى أول 'n' عنصر بعد دالة التقسيم في Javaلكنني أريد أن يبقى باقي النص كما هو. سيكون الناتج شيئًا كهذا:

  1. ألفا
  2. النسخة
  3. Delta، جاما، سيجما

يمكن تحقيق ذلك عن طريق تمرير وسيط آخر مع عملية split() في Javaوهذا سيكون الحد الأقصى للسلاسل المطلوبة.

ضع في اعتبارك الكود التالي لطريقة التقسيم في Java:

class StrSplit2{
  public static void main(String []args){
   String strMain = "Alpha, Beta, Delta, Gamma, Sigma";
    String[] arrSplit_2 = strMain.split(", ", 3);
    for (int i=0; i < arrSplit_2.length; i++){
      System.out.println(arrSplit_2[i]);
    }
  }
}

الناتج المتوقع:

Alpha
Beta
Delta, Gamma, Sigma

لاحظ أن الحد الأقصى البالغ 3 ينتج ثلاثة عناصر بالضبط: يتم احترام أول فاصلين، ويتم الاحتفاظ بكل شيء بعد الفاصل الثاني معًا كعنصر ثالث.

كيفية تقسيم سلسلة في Java بواسطة الفضاء

لنفترض أنك تريد تقسيم سلسلة نصية باستخدام المسافات. إليك مثال على سلسلة نصية مقسمة Java متغير عين strMain تتكون من بضع كلمات: مرحبًا بكم في Guru99.

public class StrSplit3{
public static void main(String args[]){
String strMain = "Welcome to Guru99";
String[] arrSplit_3 = strMain.split("\\s");
    for (int i=0; i < arrSplit_3.length; i++){
      System.out.println(arrSplit_3[i]);
    }
  }
}

الناتج المتوقع:

Welcome
to
Guru99

النمط \\s يطابق حرف مسافة بيضاء واحد. استخدم \\s+ بدلاً من ذلك، عندما يمكن فصل الكلمات بأكثر من مسافة واحدة، وإلا فإن كل مسافة إضافية تنتج عنصرًا فارغًا.

كيفية الحفاظ على السلاسل الفارغة عند تقسيمها Java

أحد سلوكيات split() يفاجئ الجميع تقريبًا في المرة الأولى التي يصادفونه فيها: تُرمى الخيوط الفارغة المتدلية بصمت. الانقسام "a,b,," تُرجع الدالة on a comma عنصرين، وليس أربعة، لأن الحد الافتراضي وهو صفر يتجاهل كل حقل فارغ في نهاية المصفوفة.

يُعدّ هذا الأمر بالغ الأهمية عندما تكون البيانات موضعية - كصف في ملف CSV مثلاً، حيث لا تزال القيمة المفقودة في النهاية تشغل عموداً. يؤدي فقدان هذه القيم الفارغة إلى تغيير كل فهرس لاحق.

اجتياز سلبي الحد يبقيهم:

String row = "Alpha,Beta,,";

// Default: trailing empty fields removed -> length 2
String[] a = row.split(",");
System.out.println(a.length);        // prints 2

// Negative limit: every field preserved -> length 4
String[] b = row.split(",", -1);
System.out.println(b.length);        // prints 4

ثلاثة قواعد تغطي جميع الحالات. حد أقصى لـ صفروهو الوضع الافتراضي، يطبق النمط بأكبر عدد ممكن من المرات ثم يحذف السلاسل الفارغة الزائدة. إيجابي تُطبّق دالة الحد النمط على الأكثر حد ناقص واحد مرة واحدة، لذا فإن العنصر الأخير يحتفظ بالباقي دون تغيير، تمامًا كما هو موضح في المثال السابق بحد 3. سلبي يطبق الحد النمط بأكبر عدد ممكن من المرات ويحتفظ بكل حقل فارغ، بما في ذلك الحقول اللاحقة.

تتصرف السلاسل الفارغة في البداية بشكل مختلف مرة أخرى: التقسيم ",a,b" ينتج دائمًا عنصرًا أولًا فارغًا بغض النظر عن الحد، لأن النمط يتطابق عند الموضع صفر. يمكن تجنب ذلك عن طريق تقليم المدخلات، أو عن طريق تصفية الناتج. مجموعة قبل الاستعمال.

split() مقابل StringTokenizer مقابل Pattern.split(): أيهما الأنسب للاستخدام؟

Java تُقدّم هذه الدالة ثلاث طرق لتقسيم سلسلة نصية إلى أجزاء. وتختلف هذه الطرق في نوع الفاصل الذي تقبله كل منها، وفي ما تُرجعه، وفي ما إذا كان النمط يُجمّع مرة واحدة أو يُعاد تجميعه في كل استدعاء، وهو أمر مهم عندما يحدث التقسيم داخل حلقة تكرارية.

البعد String.split () StringTokenizer Pattern.split()
محدد تعبير عادي مجموعة من الأحرف المفردة تعبير عادي
سياسات الإرجاع والاستبدال خيط[] الرموز عبر التعداد خيط[]
نمط مُجمّع في كل مكالمة غير قابل للتطبيق مرة واحدة، ثم أعيد استخدامها
يحتفظ بالحقول الفارغة فقط بحد سلبي أبدا فقط بحد سلبي
الحالة منتجات ينصح بها تم الاحتفاظ بالنسخة القديمة لأغراض التوافق يوصى باستخدامها في حلقات متكررة

استعمل String.split() يُستخدم هذا الأسلوب في الأعمال العادية التي تُنجز لمرة واحدة، لأنه الأقصر كتابةً والأسهل قراءةً. قم بتجميعه مسبقًا باستخدام Pattern.compile(",").split(text) عند تقسيم الحلقة، لأن التعبير النمطي يُترجم مرة واحدة فقط بدلاً من ترجمته في كل تكرار. تجنب ذلك. StringTokenizer في الكود الجديد؛ يبقى فقط من أجل التوافق مع الإصدارات السابقة.

مشترك Java أخطاء دالة split() وكيفية إصلاحها

تقريبًا كل مشكلة مع split() tracيعود هذا الخطأ إلى أحد سببين: إما أن الوسيط عبارة عن تعبير نمطي وليس سلسلة نصية حرفية، أو أن قواعد الحد المذكورة أعلاه تتجاهل الحقول بشكل غير متوقع. يوضح كل خطأ أدناه أعراضه وحلّه.

  • يؤدي تقسيم المصفوفة باستخدام النقطة إلى إرجاع مصفوفة فارغة: "1.2.3".split(".") يطابق كل حرف، لأن النقطة هي حرف بدل في التعبيرات النمطية. استخدم رمز الهروب كـ split("\\.").
  • عملية تقسيم الأنابيب تتصرف بشكل غريب: يشير الرمز "|" إلى التناوب في التعبيرات النمطية. استخدم رمز الهروب "|". split("\\|").
  • خطأ في أنواع البيانات غير المتوافقة: تم إسناد النتيجة إلى أ Stringقم بتعريف المتغير على النحو التالي: String[].
  • العنصر الأول فارغ بشكل غير متوقع: يظهر الفاصل في بداية المدخلات. قم بقص السلسلة أولاً.
  • القيم المفقودة في النهاية: تم تجاهل الحقول الفارغة الزائدة بسبب الحد الافتراضي. اجتياز -1 كالحجة الثانية.
  • استثناء المؤشر الفارغ: split() تم استدعاء الدالة على مرجع فارغ. تحقق من وجود قيمة فارغة قبل تقسيم البيانات، لأن الدالة لا يمكنها التعامل معها.

الأسئلة الشائعة

استخدم فئة الأحرف، كما في split("[,;]")، والتي تنقسم إما بفاصلة أو بفاصلة منقوطة. التناوب يعمل أيضًا: split(",|;").

نعم. قم بتغليف المصفوفة بـ Arrays.asList(text.split(",")) لعرض بحجم ثابت، أو new ArrayList<>(Arrays.asList(...)) عندما يلزم تعديل القائمة لاحقًا.

نعم. AI تُنتج الأدوات نمط عمل من تنسيق مُحدد، وتُشرح كل رمز. اختبر النتيجة في حالات استثنائية مثل الحقول الفارغة والقيم المُقتبسة قبل اعتمادها.

تحدد المساعدات التي تعمل بالذكاء الاصطناعي ما إذا كان السبب هو حرف خاص غير مهروب، أو حقل لاحق مهمل، أو فاصل بادئ، وهي التفسيرات الثلاثة لطول المصفوفة غير المتوقع.

مخصص للبيانات البسيطة فقط. لا يمكنه التعامل مع الفواصل داخل الحقول المقتبسة أو فواصل الأسطر المضمنة، لذا فإن استخدام مكتبة CSV مخصصة أكثر أمانًا للملفات الحقيقية. قراءتها سطرًا بسطر باستخدام BufferedReader يتناسب بشكل جيد مع مثل هذه المكتبة.

تلخيص هذه التدوينة بـ: