我有这样的字符串格式,它是
的输出readAllBytes(new String(Files.readAllBytes(Paths.get(data))
来自文件
a+2 b+3 c+33 d+88 ......
我的情况是我想在c+" "
之后获取数据。 c
的位置不是恒定的,但是c
仅发生一次。它可能发生在任何地方。我的要求值将始终仅在c+
之后。值33 .....的所需大小也不恒定。有人可以为我提供最佳代码吗?我认为这里需要使用收藏。
答案 0 :(得分:1)
此代码将提取c+
之后的值,直到下一个空格;如果没有空格,则提取到字符串的末尾:
String str = "a+2 b+3 c+33 d+88 ";
String find = "c+";
int index = str.indexOf(" ", str.indexOf(find) + 2);
if (index == -1)
index = str.length();
String result = str.substring(str.indexOf(find) + 2, index);
System.out.println(result);
打印
33
或方法中:
public static String getValue(String str, String find) {
int index = str.indexOf(find) + 2;
int indexSpace = str.indexOf(" ", index);
if (indexSpace == -1)
indexSpace = str.length();
return str.substring(index, indexSpace);
}
public static void main(String[] args) {
String str = "a+2 b+3 c+33 d+88 ";
String find = "c+";
System.out.println(getValue(str, find));
}
答案 1 :(得分:0)
您可以使用此正则表达式来捕获所需的数据,
c\+(\d+)
说明:
c +匹配立即在后跟一个+字符的文字c字符 (\ d +)捕获您要捕获的下一个数字。
演示,https://regex101.com/r/jfYUPG/1
这是一个演示它的Java代码,
public static void main(String args[]) {
String s = "a+2 b+3 c+33 d+88 ";
Pattern p = Pattern.compile("c\\+(\\d+)");
Matcher m = p.matcher(s);
if (m.find()) {
System.out.println("Data: " + m.group(1));
} else {
System.out.println("Input data doesn't match the regex");
}
}
这将提供以下输出,
Data: 33