【问题标题】:Scanner and substring扫描器和子字符串
【发布时间】:2016-08-03 04:49:39
【问题描述】:

我正在尝试制作一个简单的程序来读取文本文件并从中获取特定数据。在下面的代码中,我尝试获取我有报价的位置。所以假设 file.txt 的内容是:

aaaaaaa"bbbbb"ccccc
ddd"ee"ffff
g"hhhhhh"iii"gggg"

所以我应该有一个包含所有引号位置的数组列表(al = [7, 13, 3, 6, 1, 8, 12, 17])。 问题是我似乎无法从我从文本中读取的每一行中获取一个子字符串。我想获取引号内的文本。输出应该是这样的:

bbbbb
ee
hhhhhh
gggg 

代码:

File temp = new File("file.txt");
Scanner file = new Scanner(temp);
ArrayList<Integer> al = new ArrayList<Integer>();
while (file.hasNext()) {
    String k = file.next();
    //System.out.println(k);
    int position = 0;
    while (position >= 0) {
        position = k.indexOf('"', position + 1);
        //System.out.println(position);   
        al.add(position);
    }
    System.out.println(k.substring(position,position+1));
}

【问题讨论】:

  • 你的程序得到了什么?有什么问题?
  • 如果你想要引号内的字符串,你应该使用正则表达式
  • 带有PatternMatcher 的正则表达式在您的字符串中有超过2 个引号集的情况下应该很有用。你有什么理由不在这里使用正则表达式?

标签: java substring


【解决方案1】:

如果您可以按照上面的建议使用正则表达式,那么您可以这样做(假设引号在同一行中打开和关闭):

    List<String> lines = Files.lines(Paths.get("files/input.txt")).collect(Collectors.toList()); 
    Pattern p = Pattern.compile("\"(.*?)\"");
    for(String line : lines){
        Matcher m = p.matcher(line); 
        while(m.find())
            System.out.println(m.group(1).replaceAll("\"", ""));
    }

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2019-01-18
    • 2014-03-29
    相关资源
    最近更新 更多