كيف أقوم بتقسيم سلسلة باستخدام أي أحرف مسافات بيضاء كمحددات؟

StackOverflow https://stackoverflow.com/questions/225337

  •  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")

HTTP: //commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#split(java.lang.String)

وهذا قد يكون أسهل استخداما من نمط رجإكس.

ونظرا لأنه هو تعبير عادي، وأنا أفترض ش شأنه أيضا لا تريد حرف غير الأبجدية الرقمية مثل الفواصل، النقاط، وغيرها التي يمكن أن تكون محاطة الفراغات (على سبيل المثال "واحدا أو اثنين" يجب أن تعطي [واحد] [اثنين ])، ينبغي أن يكون:

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);

        } 
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top