【问题标题】:Java Substring based on condtion基于条件的Java子字符串
【发布时间】:2021-12-06 00:11:20
【问题描述】:

我对 Java 还是很陌生,我想知道是否有一种有效的方法可以根据条件创建子字符串。

目前我正在读取一个 txt 文件并使用 BufferedReader 将该 txt 文件更改为字符串格式。

我收到了几个 txt 文件,但它们都具有相同的格式。 我要提取的数据总是在第 45 行。 而 txt 文件的第 45 行总是看起来像这样。

number : abcd

我想提取“abcd”部分。 如果有人能告诉我是否有任何方法可以做到这一点,我们将不胜感激。

【问题讨论】:

  • 所以你想遍历文件直到第 45 行?然后根据冒号拆分?
  • 是的,第45行前后的所有数据都是不必要的,我想要冒号后面的字符串!
  • 那么两个问题,你目前尝试了哪些,发现了什么问题?
  • 使用for loop 调用BufferedReader.readline() 45 次。在第 45 次迭代时,使用String.split() 用冒号分隔行。
  • System.out.println("number : abcd".split(" : ")[1]);

标签: java substring


【解决方案1】:

在特定行读取文件并使用正则表达式获取所需数据:

import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


class Main{

    public static void main(String[] args) {
        
        try{
                String line45 = Files.readAllLines(Paths.get("file.txt")).get(44);

                String pattern = "\\: (.*)"; // Capture everything after ':' colon character

                Pattern r = Pattern.compile(pattern);
                Matcher m = r.matcher(line45);
                if (m.find( )) {
                    System.out.println("Found value: " + m.group(1) );
                }

        }catch (IOException e) {
            System.out.println("entry not found.");
        }
    }
}

Found value: abcd

m.group(1) 分配给变量并根据需要使用数据。

【讨论】:

  • 请注意,如果文件很大,readAllLines 可能会不必要地浪费内存和 IO 吞吐量。
【解决方案2】:

这应该可行:

String s = stringFromTextFile;
s = s.split(":")[1];
s = s.substring(1, s.length());
System.out.println("Abcd: " + s);

s = s.split(":")[1] 行本质上构成了一个包含 2 个元素的数组。例如,条目 0 将是“数字”,而条目 1 将是“abcd”。 然后,s = s.substring(1, s.length()) 删除 'abcd' 开头的空格,将其变成 'abcd'。

免责声明:此代码未经过全面测试,因此可能会出现一些错误。

【讨论】:

    【解决方案3】:

    将文件内容读取为字符串列表

        Files.readAllLines(new File(fileName).toPath(), Charset.defaultCharset());
    

    得到第45个元素,然后用:分割得到第二个数组元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-08
      • 2018-08-05
      • 2020-07-09
      • 2021-01-22
      • 2021-06-23
      相关资源
      最近更新 更多