假设我有一个字符串,输入字符串的版本不同:
a) Name='book' Number='345' Version='12' Author='name1'
b) Name='book' Version='12' Author='name1' Number='345'
我需要从此输入字符串中删除Version='xx' and Number='xx'
。此参数的值可以随时更改。
最好的方法是什么?我尝试了正则表达式,例如:
String input = input.substring(0, input.indexOf("Number")) + "" + input.substring(input.indexOf("Version"));
但这仅在这种情况下有效:
a) Name='book' Number='345' Version='12' Author='name1'
但并非如此:
b) Name='book' Version='12' Author='name1' Number='345'
那么如何制定通用方法?
答案 0 :(得分:5)
您可以使用正则表达式替换:
ProcessBuilder builder = new ProcessBuilder("/bin/sh", "-c", "sudo -H -u xfbcft -i");
builder.redirectErrorStream(true);
返回"Name='book' Number='345' Version='12' Author='name1'"
.replaceAll("( Number| Version)='\\d+'", "")
Name='book' Author='name1'
找到replaceAll("( Number| Version)='\\d+'", "")
或Number
,后跟单引号中的数字,并将其替换为空白字符串。
如下面的Aaron's comment所建议,如果键/值对的顺序可以更改,则使用不同的正则表达式可能会更好:
Version
无论键之前是空格还是在行首,这都将与键匹配。
答案 1 :(得分:0)
您可以使用如下所示的replaceAll方法来实现正则表达式的目标:
String input = "Name='book' Number='345' Version='12' Author='name1'";
String input2 = "Name='book' Version='345' Number='12' Author='name1'";
input = input.replaceAll("(Number|Version)='\\d+'", "");
input2 = input2.replaceAll("(Number|Version)='\\d+'", "");
System.out.println(input);
System.out.println(input2);
输出为:
Name='book' Author='name1'
Name='book' Author='name1'