多次拆分和提取java字符串
我有一个java字符串,例如:多次拆分和提取java字符串,java,Java,我有一个java字符串,例如: String myString = "MYVAR1(some data[some text]) SOMEVAR(table spoon fork(chairs cloths)[cups] ANOTHERVAR(balloons{clowns} bubbles)" 字符串包含我需要从中提取信息的变量。我想要的最终结果是这样的: String myVar = "(some data[some text])" String someVar = "(table spoo
String myString = "MYVAR1(some data[some text]) SOMEVAR(table spoon fork(chairs cloths)[cups] ANOTHERVAR(balloons{clowns} bubbles)"
字符串包含我需要从中提取信息的变量。我想要的最终结果是这样的:
String myVar = "(some data[some text])"
String someVar = "(table spoon fork(chairs cloths)[cups]"
String anotherVar = "(balloons{clowns} bubbles)"
字符串也可能类似于:
String myString = "MYVAR1(some data[some text]) SOMEVAR(table spoon fork(chairs cloths)[cups]"
结果应该是:
String myVar = "(some data[some text])"
String someVar = "(table spoon fork(chairs cloths)[cups]"
String anotherVar = ""
我试过:
String[] parts = string.split("MYVAR1");
但这让我明白了一切,不仅仅是MYVAR1的内容。根据我的理解,你试图提取括号内的单词。 您可以使用正则表达式来匹配所需的内容 例如:
String regex = “\\(.+\\)(\\[.+\\]){0,1}” // this match everything inside the brackets and match what’s inside [] when present
请尝试以下代码:
String myString = "MYVAR1(some data[some text]) SOMEVAR(table spoon fork(chairs cloths)[cups] ANOTHERVAR(balloons{clowns} bubbles)";
String myVar1 = myString.split("MYVAR1")[1].split("SOMEVAR")[0];
String tmpSomeVAR = myString.split("SOMEVAR")[1];
String someVar = "";
String ANOTHERVAR = "";
String[] tmp = tmpSomeVAR.split("ANOTHERVAR");
if (tmpSomeVAR.split("ANOTHERVAR").length == 1) {
someVar = tmpSomeVAR;
} else {
String[] parts = tmpSomeVAR.split("ANOTHERVAR");
someVar = parts[0];
ANOTHERVAR = parts[1];
}
System.out.println(myVar1);
System.out.println(someVar);
System.out.println(ANOTHERVAR);
试试这个
public class TestClass {
public static void main(String a[]){
String myString = "MYVAR1(some data[some text]) SOMEVAR(table spoon fork(chairs cloths)[cups] ANOTHERVAR(balloons{clowns} bubbles)";
System.out.println("myVar = " + getValue(myString, "MYVAR1", "SOMEVAR"));
System.out.println("someVar = " + getValue(myString, "SOMEVAR", "ANOTHERVAR"));
System.out.println("anotherVar = "+ getValue(myString, "ANOTHERVAR", null));
System.out.println();
myString = "MYVAR1(some data[some text]) SOMEVAR(table spoon fork(chairs cloths)[cups]";
System.out.println("myVar = " + getValue(myString, "MYVAR1", "SOMEVAR"));
System.out.println("someVar = " + getValue(myString, "SOMEVAR", "ANOTHERVAR"));
System.out.println("anotherVar = " + getValue(myString, "ANOTHERVAR", null));
}
private static String getValue(String myString, String name,String nextName){
if(myString == null || name == null) return "";
int a = myString.indexOf(name);
if (a == -1) return "";
if(nextName == null){
return myString.substring(a+name.length());
}
else {
int b = myString.indexOf(nextName);
if(b>-1){
return myString.substring(a + name.length(), b);
}
else {
return myString.substring(a + name.length());
}
}
}
}
不总是括号。这是在搜索的条之后和下一个varUse\(.+\)(\[.+\])*之前的内容。在您的示例中,[cups]之后是否应该有一个右括号?为什么输入在
[cups]
之后没有右括号?它打破了平衡括号模式。虽然这很有效,但它假设变量是有序的。也就是说,MYVAR1在SOMEVAR之前。。酒吧可以是任何顺序的字符串。还假设另一个Var是最后一个,情况可能并非如此。另一个变量可能在字符串的前面…虽然这很有效,但它假设变量是有序的。也就是说,MYVAR1在SOMEVAR之前。。酒吧可以是任何顺序的字符串。还假设另一个Var是最后一个,情况可能并非如此。另一个变量可能位于字符串的前面…您可以通过更改参数“name”和“nextName”值来处理它