2015-10-13 7 views
5

मेरे पास यह स्ट्रिंग है जिसे मैं एक टेक्स्ट फ़ाइल से ले रहा हूं।उलझन में कैसे जावास्क्रिप्ट में काम करता है .split() जावा

"1 normal 1 [(o, 21) (o, 17) (t, 3)]" 

मैं स्ट्रिंग सरणी में 1, normal, 1, o, 21, 17, t, 3 लेना चाहता हूं।

Scanner inFile = new Scanner(new File("input.txt"); 
String input = inFile.nextLine(); 

String[] tokens = input.split(" |\\(|\\)|\\[\\(|\\, |\\]| \\("); 
    for(int i =0 ; i<tokens.length; ++i) 
    { 
     System.out.println(tokens[i]); 
    } 

आउटपुट:

1 
normal 
1 

o 
21 


o 
17 


t 
3 

क्यों रिक्त स्थान सरणी में संग्रहीत किया जा रहा है।

उत्तर

0

उदाहरण यहाँ के लिए:

1 [(o 
  1. पहला कदम से कम यह एक जगह से मेल खाता है।
  2. अगले कदम यह इन दोनों के बीच मिलान [(

तो मेल खाता है, एक शून्य स्ट्रिंग "" दिया जाता है।

6

यह रिक्त स्थान नहीं है, यह खाली तार है। आपका स्ट्रिंग है:

"1 normal 1 [(o, 21) (o, 17) (t, 3)]" 

यह निम्न तरीके से अपने regexp के अनुसार विभाजित है:

Token = "1" 
Delimiter = " " 
Token = "normal" 
Delimiter = " " 
Token = "1" 
Delimiter = " " 
Token = "" <-- empty string 
Delimiter = "[(" 
Token = "o" 
... end so on 

जब दो आसन्न सीमांकक दिखाई देते हैं, यह उन दोनों के बीच एक खाली स्ट्रिंग टोकन यह है कि माना जाता है।

इसे ठीक करने के आप अपने regexp, उदाहरण के लिए, इस तरह बदल सकता है:

"[ \\(\\)\\[\\,\\]]+" 

इस प्रकार "()[,]" आसन्न है वर्णों की संख्या परिसीमक के रूप में विचार किया जाएगा।

संबंधित मुद्दे