在文件中查找字符串或字符串数​​组在 Java 中将它们分开

Posted

技术标签:

【中文标题】在文件中查找字符串或字符串数​​组在 Java 中将它们分开【英文标题】:Find String or String Array in a File separate them in Java 【发布时间】:2020-01-11 01:14:58 【问题描述】:

我有一个 txt 文件,其中包括:

Hello Word
myStrings = [str1, str2, str3]
Goodbye Word

我想读取文件以找到“myStrings”字符串,然后有一个循环来检查 myStrings 值 [str1, str2, str3] 中的一个是否与某个变量匹配。

目前我正在寻找这样的 myStrings:

Scanner scanner = new Scanner(fileName);
while (scanner.hasNextLine()) 
    String fileline = scanner.nextLine();
    String myStringsKey = "myStrings =";
    if(fileline.startsWith(myStringsKey))  

    

如何实现 str2 以检查已定义的 var?我想我应该使用“拆分”。

【问题讨论】:

【参考方案1】:

您必须解析该行的内容:您应该首先撕掉括号,然后用逗号分割字符串并将每个项目添加到Set,其中将包含不同的值。

然后,立即检查该集合是否包含您想要的值。

【讨论】:

【参考方案2】:

您可以使用正则表达式并将其包含在 if 块中:

if (fileline.startsWith(myStringsKey)) 
    // regex to extract text within brackets
    Pattern p = Pattern.compile("(?<=\\[).+?(?=\\])");  
    Matcher m = p.matcher(fileline);

    while (m.find()) 
        System.out.println(m.group().split(",")[1]); // str2
    
 

【讨论】:

但我需要检查定义的 var 是否等于 str1 或 str2 我们是否有办法动态定义而不是 sayin [1]? 这会返回什么?它将与哪个字符串进行比较?假设这是一个字符串“myStrings = [[st[r1, str2, str3]”,我希望 str3 作为输出 我的意思是,例如我已经定义了 static var myStatic="str3" 并且我已经用你的方式在 [ - ] 这些字符之间返回了 str1、str2、str3。 myStatic 和所有其他 3 个字符串之间的比较不好。如果我像你一样给出 [1],我只会得到 str2,但我想根据定义的一个找到 str3 或 str1。 - 并且在我的项目中定义的 var 将是动态的,例如从用户那里获取。 你可以循环遍历数组而不是直接访问索引然后检查——这是你需要的吗? @Mak:分割线后,您可以遍历它并检查。顺便说一句,那是你的反对票吗?【参考方案3】:

以一种非常简单的方式,

 Scanner scanner = new Scanner(fileName);
    while (scanner.hasNextLine()) 
        String fileline = scanner.nextLine();
        String myStringsKey = "myStrings =";
        if(fileline.startsWith(myStringsKey))  
            String[] temp = fileline.replaceAll("myStrings =","").replaceAll("\\[", "").replaceAll("\\]", "").trim().split(",");
                for (int i = 0; i < temp.length; i++) 
                    if(temp[i].trim().equalsIgnoreCase("str2"))
                        System.out.println("Str2 matched");
                    
                
        
    

【讨论】:

如果字符串包含括号,这将失败,因为它也会替换每个字符串中的括号。例如:["ab[b", "zx[ccc"] 有几种方法可以防止它们被替换,例如 fileline.replaceFirst("\[", "") 或不包括第一个和最后一个字符的子字符串,我只是向他展示了这样做的方法。跨度> 【参考方案4】:

为了解析你的字符串,你可以使用以下简单的方法:

public String[] parseMyStrings(String s) 
    int beginIndex = s.indexOf("[") + 1;
    int endIndex = s.indexOf("]");

    s = s.substring(beginIndex, endIndex);

    // split and trim in one shot
    return s.split(("\\s*,\\s*"));

然后,您的最终代码可能如下所示:

Scanner scanner = new Scanner(fileName);
while (scanner.hasNextLine()) 
    String fileline = scanner.nextLine();
    String myStringsKey = "myStrings =";
    if(fileline.startsWith(myStringsKey)) 

        String[] values = parseMyStrings(fileline);
        System.out.println(Arrays.toString(values));

    

我认为如果您将解析逻辑放入单独的方法中,您的代码将更具可读性并且更易于扩展或修改。

【讨论】:

【参考方案5】:
scanner = new Scanner(new File(fileName));
while (scanner.hasNextLine()) 
   String fileline = scanner.nextLine();
   if(fileline.contains("myStrings")) 
      String string = fileline.substring(fileline.indexOf("[") + 1, fileline.indexOf("]"));
      String[] vars = string.split(",");
      System.out.println(Arrays.toString(vars));
   

【讨论】:

以上是关于在文件中查找字符串或字符串数​​组在 Java 中将它们分开的主要内容,如果未能解决你的问题,请参考以下文章

在 txt 文件 Java 中查找字符串(或行)

如何对文本文件进行排序以在 O(MN) 时间复杂度中查找字谜,其中 M 是最大字符数,N 是单词数?

java - 如何查找包含特殊字符或空格的url是不是存在于java中

ubuntu中在终端下如何查找具有某一特定字符串的文件?

QT 如何在文件中查找是不是有该字符或字符串?

在 Java 中打印 Unicode 或补充字符