首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将字符串与数组中的所有元素进行比较?

如何将字符串与数组中的所有元素进行比较?
EN

Stack Overflow用户
提问于 2015-08-07 19:05:08
回答 2查看 1.1K关注 0票数 0

我正在寻找一种将字符串(在本例中是文本文件中的一行)与数组中的每个元素进行比较的方法,并查看是否有匹配项。在高层次的概述中,我有一个字符串数组(大约100个元素),这些字符串都包含在文件的某个地方,需要删除。因此,我正在将一个文件读入StringBuffer并编写每一行,除非跳过与数组中的元素匹配的所有行。到目前为止,这就是我所拥有的:

代码语言:javascript
运行
复制
//Main Class calling the method
public class TestApp {
  public static void main(String[] args) {
    CompareAndDelete.RemoveDuplicateLines("C:/somelocation", 2Darray);
  }
}


public class CompareAndDelete {

  static string Line_of_Text;
  static StringBuffer localBuff = new StringBuffer();
  static FileReader Buffer;
  static BufferedReader User_File;

        public static void RemoveDuplicateLines(String local, String[][] duplicates) throws IOException 
        {
          //Converting 2D array to one-dimensional array
          final String[] finalDups = new String[duplicates.length];
          for(int i = 0; i < duplicates.length; i++)
        {
            finalDups[i] = duplicates[i][0]+" "+duplicates[i][1];
        }

          int count = 0;
          User_File = new BufferedReader(Buffer);
          Set<String> Values = new HashSet<String>(Arrays.asList(finalDups));
          while((Line_of_Text = User_File.readLine()) != null){
            if(!(Values.contains(Line_of_Text))){
                localBuff.append(Line_of_Text+"\n");
            }else{
                count++;
            }
        }
        System.out.println(count);

        //Printing StringBuffer to file
        BufferedWriter testOutFile = new BufferedWriter(new FileWriter("C:/test.txt"));
        testOutFile.write(localBuff.toString());
        testOutFile.flush();
        testOutFile.close();
    }

所以我不确定IF状态,我知道它不能正常工作,它目前只是删除新StringBuffer中的前几个元素,因为这些行正好接近文件的末尾,而且它不会重新检查每一行是否与每个元素匹配。我知道一定有更好的方法.提前感谢您的帮助/建议。

**更新:使用上面的代码,它现在在这一行上抛出以下错误:

代码语言:javascript
运行
复制
while((Line_of_Text = User_File.readLine()) != null){

错误:

代码语言:javascript
运行
复制
Exception in thread "main" java.io.IOException: Stream closed
  at sun.nio.cs.StreamDecoder.ensureOpen(StreamDecoder.java:51)
  at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:204)
  at java.io.InputStreamReader.read(InputStreamReader.java:188)
  at java.io.BufferedReader.fill(BufferedReader.java:147)
  at java.io.BufferedReader.readLine(BufferedReader.java:310)
  at java.io.BufferedReader.readLine(BufferedReader.java:373)
  at compare.CompareAndDelete.RemoveDuplicateLines(CompareAndDelete.java:48)
  at mainPackage.TestApp.main(TestApp.java:326)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-07 19:08:29

通过将String数组成员添加到Set中,然后检查set contains()是否为当前行,可以非常有效地完成这一任务。示例:

代码语言:javascript
运行
复制
Set<String> ignoredStrings = new HashSet<String>(Arrays.asList(arr));

String line;
while ((line = file.readLine()) != null) {
    if (!ignoredStrings.contains(line)) {
        buffer.append(line);
        buffer.append("\n");
    }
}
票数 0
EN

Stack Overflow用户

发布于 2015-08-07 19:10:22

以下是一种方法:

代码语言:javascript
运行
复制
public boolean isStringInArray(String str, String[] strarr){
    for(String s: strarr){
        if(str.equals(s)) return true;
    }
    return false
}

isStringInArray("Hello", new String[]{"Hello", "World"}); // True           
isStringInArray("Hello", new String[]{"hello", "World"}); // False
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31884933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档