2012-03-25 184 views
0

我有一個字符串:麻煩解析字符串

String value = "(name) Says: hello (/name)"; 

,其中「名」也可能是「姓氏」,「地址」,「郵編」或許多許多其他的東西。

我分裂了「(」 我也想拆了「)」 ......然而,某些字符串將只包含以下字符串:

String value = "(name Says: hello (/name)"; 

我的問題是,串內容可能還包含「)」和「(」所以我會如何解析這個再比如:

String value = "(name Says: can you solve for y = (x-b)? (/name)"; 

字符串也可能是如下:

String value = "(name)Says: can you solve for y = (x-b)? (/name)"; 

OR

String value = "(name) Says: can you solve for y = (x-b)?(/name)"; 

OR

String value = "(name)Says: can you solve for y = (x-b)?(/name)"; 

我最初以爲我能做到多少 「)」 有一個字符串中的計數。但是,如果超過2個,我不確定我應該怎麼做?之所以我需要知道有多少「)」有一個字符串是因爲我想隔離「名稱」

有什麼想法嗎? (我不希望使用任何庫,只是想拿出邏輯)...

回答

1

的問題是,我不太清楚。然而,就我所能理解的,我想你想要捕捉這個名字以及它後面的句子,分別地。如果我錯了,請糾正我。

這裏的解決方案: 1.Parse您的字符,直到之後 「(」 第一空間

2.Store它在一個臨時字符串其長度由temp.length()給出

3.So。檢查是否temp.charAt(temp.length()-1)==')'

4.如果是,那麼名稱將是在子temp.substring(1,temp.length()-2)

5.Otherwise這將是在子temp.substring(1,temp.length()-1)

6.現在名稱後的值可以存儲在另一個String中,直到找到"(/"

希望它有幫助。

1

提取的第一個空格後的所有字符和最後空間之前。

+0

感謝您的迴應,這將工作,不幸我忘了提及,「)」之後的空間並不總是存在...... +1對於想法/幫助 – BigBug 2012-03-25 06:15:03

+0

然後檢查字符串是否以「 (name);如果不是,則中止;如果是,檢查它是否以「(name)」開頭,如果是,則在第一個')'之後但在最後一個' 'e',但在最後一個'('。 – 2012-03-25 06:49:13

1

下面的代碼將同時在你的病情的恢復名稱:

String s = "(name Says: can you solve for y = (x-b)? (/name)"; 
int firstIndex = s.indexOf("("); 
int secondIndex = s.indexOf(":"); 
int thirdIndex = 0; 
String name = ""; 
if(s.substring(firstIndex, secondIndex).contains(")")) { 
    thirdIndex = s.indexOf(")"); 
} else { 
    thirdIndex = s.indexOf(" "); 
} 

System.out.println("(name) or (name : "+s.substring(firstIndex+1, thirdIndex)); 
String temp = s.substring(thirdIndex+1, s.length()); 
System.out.println(temp.substring(0, temp.indexOf("(/"))); 
System.out.println("(/name) : "+ temp.substring(temp.indexOf("(/")+2, temp.lastIndexOf(")"))); 
1

首先解析最後一個符號,但不會找到「(/ string)」 然後獲取除「(/」和「)」之外的所有內容,邊緣處的空格除外。 並嘗試在該行實物這種結構的開始查找「(」 + name.trim()+「)」有或無「)」

除了java.util.regex中。*必須是你最好的朋友在這種情況下。