我有一个字符串:
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,我不知道该怎么做?之所以我需要知道字符串中有多少“)”是因为我想要隔离“名字”
任何想法? (我不想使用任何库,只想提出逻辑)...
答案 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。*在这种情况下必须是你最好的朋友。