كيف أقوم بتقسيم سلسلة باستخدام أي أحرف مسافات بيضاء كمحددات؟
-
03-07-2019 - |
سؤال
ما هو نمط regex الذي أحتاج إلى تمريره إلى java.lang.String.split()
طريقة لتقسيم سلسلة إلى صفيف من السلاسل الفرعية باستخدام جميع أحرف المسافات البيضاء (' '، ' '، '
'، وما إلى ذلك) كمحددات؟
المحلول
شيء في صفوف
myString.split("\\s+");
وهذه الجماعات كل المساحات البيضاء كما هو محدد.
وهكذا إذا كان لدي سلسلة:
و"Hello[space][tab]World"
وهذا يجب أن تسفر عن "Hello"
سلاسل و"World"
وحذف مساحة فارغة بين [space]
و[tab]
.
وكما أشار VonC بها، يجب أن يتم تخطي مائل، لأن جافا سيحاول أولا للهروب من سلسلة لطابع خاص، وإرسال <م> أن م> إلى أن تحليل. ما تريد، هو "\s"
الحرفي، وهو ما يعني، تحتاج إلى تمرير "\\s"
. فإنه يمكن الحصول على مربكا بعض الشيء.
وو\\s
ما يعادل [ \\t\\n\\x0B\\f\\r]
نصائح أخرى
في معظم اللهجات التعبير العادي هناك مجموعة من ملخصات شخصية مريحة يمكنك استخدامها لهذا النوع من الشيء - وهذه هي جيدة منها لنتذكر:
و\w
- مباريات أي حرف كلمة.
و\W
- مباريات أي حرف nonword.
و\s
- مباريات أي حرف المسافة البيضاء.
و\S
- مباريات أي شيء ولكن الأحرف المساحة البيضاء.
و\d
- مباريات أي أرقام.
و\D
- مباريات أي شيء ما عدا الأرقام
والبحث عن "Cheatsheets التعبيرات المنتظمة" يجب أن يجزيك مجموعة كبيرة من ملخصات مفيدة.
للحصول على هذا العمل في جافا سكريبت, ، كان علي أن أفعل ما يلي:
myString.split(/\s+/g)
و"\\ الصورة +" ينبغي أن تفعل خدعة
وأيضا قد يكون لديك يونيكود غير كسر الفضاء xA0 ...
String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");
وأباتشي العموم لانغ لديه طريقة لتقسيم السلسلة مع أحرف المسافات البيضاء كمحددات:
StringUtils.split("abc def")
وهذا قد يكون أسهل استخداما من نمط رجإكس.
ونظرا لأنه هو تعبير عادي، وأنا أفترض ش شأنه أيضا لا تريد حرف غير الأبجدية الرقمية مثل الفواصل، النقاط، وغيرها التي يمكن أن تكون محاطة الفراغات (على سبيل المثال "واحدا أو اثنين" يجب أن تعطي [واحد] [اثنين ])، ينبغي أن يكون:
myString.split(/[\s\W]+/)
وأنا مندهش أن أحدا قد ذكر String.split () مع أية معلمات. أليس هذا ما جعلها عنه؟ كما في:
"abc def ghi".split()
ويمكنك تقسيم سلسلة من كسر خط باستخدام العبارة التالية:
String textStr[] = yourString.split("\\r?\\n");
ويمكنك تقسيم سلسلة من مسافة بيضاء باستخدام العبارة التالية:
String textStr[] = yourString.split("\\s+");
String str = "Hello World";
String res[] = str.split("\\s+");
ودراسة هذا الرمز .. حظا سعيدا
import java.util.*;
class Demo{
public static void main(String args[]){
Scanner input = new Scanner(System.in);
System.out.print("Input String : ");
String s1 = input.nextLine();
String[] tokens = s1.split("[\\s\\xA0]+");
System.out.println(tokens.length);
for(String s : tokens){
System.out.println(s);
}
}
}