解析字符串的麻烦

时间:2012-03-25 06:06:43

标签: java

我有一个字符串:

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

其中“name”也可以是“lastName”,“address”“postalCode”或许多其他内容。

我将字符串拆分为“(” 我也希望拆分“)”...但是,一些字符串只包含以下内容:

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

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

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

我最初认为我可以计算字符串中有多少“)”。但是,如果超过2,我不知道该怎么做?之所以我需要知道字符串中有多少“)”是因为我想要隔离“名字”

任何想法? (我不想使用任何库,只想提出逻辑)...

4 个答案:

答案 0 :(得分:1)

在第一个空格之后和最后一个空格之前提取所有字符。

答案 1 :(得分: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(")")));

答案 2 :(得分:1)

这个问题对我来说不是很清楚。但是,据我所知,我想你想要分别抓住这个名字以及它后面的句子。如果我错了,请纠正我。

这是解决方案: 1.将你的字符串分解到“(”。

之后的第一个空格

2.将其存储在临时字符串中。其长度由temp.length()给出。

3.检查是否temp.charAt(temp.length()-1)==')'

4.如果是,则名称将在子串temp.substring(1,temp.length()-2)中。

5.否则它将在子串temp.substring(1,temp.length()-1)中。

6.现在名称后的值可以存储在另一个String中,直到找到"(/"

希望它有所帮助。

答案 3 :(得分:1)

首先解析最后一个符号,但找不到“(/ string)” 然后得到“(/”和“)”之间的所有内容,除了边缘的空格。 并尝试在行的开头找到这种结构的类型“(”+ name.trim()+“)”有或没有“)”

除了java.util.regex。*在这种情况下必须是你最好的朋友。