读取字符串格式并获取所需的不规则数据

时间:2018-11-02 14:00:15

标签: java string arraylist collections split

我有这样的字符串格式,它是

的输出
readAllBytes(new String(Files.readAllBytes(Paths.get(data))

来自文件

a+2  b+3 c+33 d+88 ......

我的情况是我想在c+" "之后获取数据。 c的位置不是恒定的,但是c仅发生一次。它可能发生在任何地方。我的要求值将始终仅在c+之后。值33 .....的所需大小也不恒定。有人可以为我提供最佳代码吗?我认为这里需要使用收藏。

2 个答案:

答案 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