2012-03-25 142 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中。*必须是你最好的朋友在这种情况下。