क्या कोई मुझे यह समझने में मदद कर सकता है कि जावा में split कैसे काम करता है। मेरे पास निम्न कोड है:

String temp_array[];           
    String rates = "RF\\0.6530\\0.6535\\D";
    String temp = rates.substring(1, rates.length());
    System.out.println(temp);// prints F\0.6530\0.6535\D
    String regex = "\\";
    temp_array = temp.split(regex);
    String insertString = "INSERT into table values("+temp_array[0]+","+temp_array[1]+","+temp_array[2]+","+temp_array[3]+")";

हालांकि विभाजन समारोह में मुझे निम्न अपवाद मिलता है:

Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
 ^
    at java.util.regex.Pattern.error(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.util.regex.Pattern.<init>(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.lang.String.split(Unknown Source)
    at java.lang.String.split(Unknown Source)
    at simple_hello.main(simple_hello.java:15)
8
ayush 10 मार्च 2011, 12:06

5 जवाब

\ रेगुलर एक्सप्रेशन के साथ-साथ जावा स्ट्रिंग लिटरल में एक विशेष वर्ण है। यदि आप एक रेगेक्स में एक शाब्दिक बैकस्लैश चाहते हैं, तो आपको इसे दो बार दोहराना होगा। \\\\ का प्रयास करें (एक बार लेक्स हो जाने पर \\ बन जाता है, एक शाब्दिक \ बन जाता है रेगेक्स पार्सर)।

4
user 19 जून 2014, 00:50

आप स्ट्रिंग को बैक स्लैश पर विभाजित करने का प्रयास कर रहे हैं, आपको इसका उपयोग करने की आवश्यकता है:

String regex = "\\\\";

\ जावा स्ट्रिंग और रेगेक्स इंजन दोनों के लिए एस्केप कैरेक्टर है। तो एक जावा स्ट्रिंग \\ को रेगेक्स इंजन पर \ के रूप में पास किया जाता है जो अपूर्ण है क्योंकि \ को उस चरित्र द्वारा पीछा किया जाना है जिसे वह बचने की कोशिश कर रहा है।

स्ट्रिंग \\\\ को रेगेक्स इंजन में \\ के रूप में पास किया जाता है, जो एक \ है जो \ से बच रहा है, जिसका प्रभावी रूप से शाब्दिक अर्थ \ है।

2
codaddict 10 मार्च 2011, 12:09

आपको रेगेक्सपी पैटर्न में '\' चार से बचना होगा, इसलिए आपका रेगेक्स मूल रूप से होगा

String regex = "\\\\";
2
Nishan 10 मार्च 2011, 12:11

बदलने के

String regex = "\\";

साथ

String regex = "\\\\";

2
Clyde Lobo 10 मार्च 2011, 12:12

आपको अपना रेगेक्स ठीक करना होगा। यह होना चाहिए:

String regex = "\\\\";

क्योंकि डबल बैकस्लैश जावा स्ट्रिंग्स के लिए एक एस्केप सीक्वेंस है।

2
Manrico Corazzi 10 मार्च 2011, 12:18