Java 比较ArrayList中的字符串。区分大小写的

Java 比较ArrayList中的字符串。区分大小写的,java,arraylist,case,Java,Arraylist,Case,这是我的第一篇文章。我花了几个小时试图找出如何将我的字符串,即word与所有ArrayList元素进行比较,检查它们是否相等,不考虑大小写 这是我的密码 private static void writeFile(Scanner scanWords, ArrayList<String> wordList, FileWriter fo, BufferedWriter out) throws IOException { String word = null; int

这是我的第一篇文章。我花了几个小时试图找出如何将我的字符串,即
word
与所有
ArrayList
元素进行比较,检查它们是否相等,不考虑大小写

这是我的密码

private static void writeFile(Scanner scanWords, ArrayList<String> wordList,
  FileWriter fo, BufferedWriter out) throws IOException {
    String word = null;
    int count = 0;
    boolean contains=false;
    String temp = "";

    for(int i = 0; i<wordList.size();i++){

        while(scanWords.hasNext()){
            word= scanWords.next();

            if(wordList.get(i).equalsIgnoreCase(word)){
                contains = true;
            }else{
                System.out.println(word);
                out.write(word);
                //out.write(word);
            }
        }
    }
    count++;
    out.close();
}
private static void writeFile(扫描仪扫描字、ArrayList字表、,
FileWriter fo,BufferedWriter out)引发IOException{
字符串字=null;
整数计数=0;
布尔包含=假;
字符串temp=“”;

对于(int i=0;i首先,将
列表
转换为不区分大小写字符串的
哈希集
,即所有小写字符(使用
String.toLowerCase()
方法)。然后可以使用
集合.contains()
方法

e、 g

列表字符串;
Set lowercasesetrings=newhashset(strings.size());
for(字符串str:strings){
lowercaseestrings.add(str.toLowerCase());
}
布尔匹配=lowerCaseString.contains(myStr.toLowerCase());

编辑:建议使用
ArrayList
,但应该是
HashSet
-请参阅下面的注释。

首先,将
列表
转换为不区分大小写字符串的
HashSet
,即所有小写字符(使用
String.toLowerCase()
方法)。然后可以使用
集合.contains()
方法

e、 g

列表字符串;
Set lowercasesetrings=newhashset(strings.size());
for(字符串str:strings){
lowercaseestrings.add(str.toLowerCase());
}
布尔匹配=lowerCaseString.contains(myStr.toLowerCase());
编辑:建议使用
ArrayList
,但应该是
HashSet
——请参阅下面的注释

如何将我的字符串(即
word
与所有
ArrayList
元素)进行比较

看起来,您正在错误地使用
scanWords
scanner对象

使用您的代码,如果
words列表的第一个元素
与任何
scanWords
元素不匹配,那么
words列表
中的任何元素都不会被处理以进行比较。原因是,为了与列表中的第一个单词进行比较,您已经迭代到了
scanWords
的末尾,这将导致下一次调用要
hasNext()
请始终返回一个
false

以下是对您的要求的修复:

while ( scanWords.hasNext() ) {
  word= scanWords.next();
  //for( int i = 0; i < wordList.size(); i++ ) {
  for( String wordInList : wordList ) {
    if( wordInList.equalsIgnoreCase( word ) ) {
      contains = true;
    } else {
      System.out.println( word );
      out.write( word );
    }
  } // for list
} // while scanner

样本执行

List<String> ls = new ArrayList<String>( 4 );
ls.add( "raVi" );
ls.add( "sreekaR" );
ls.add( "lakShMi" );
ls.add( "sumAna" );

String listElements = ls.toString();
System.out.println( "listElements: " + listElements );
System.out.println( "listElements.toLowerCase(): " + listElements.toLowerCase() );
scanner = new Scanner( "Ravi Sumana Others sREEKar LAKshmi" );
while( scanner.hasNext() ) {
  String w1 = scanner.next();
  System.out.println( "'" + w1 + "' is in list ? = " + listElements.toLowerCase().contains( w1.toLowerCase() ) );
}
如何将我的字符串(即
word
与所有
ArrayList
元素)进行比较

看起来,您正在错误地使用
scanWords
scanner对象

使用您的代码,如果
words列表的第一个元素
与任何
scanWords
元素不匹配,那么
words列表
中的任何元素都不会被处理以进行比较。原因是,为了与列表中的第一个单词进行比较,您已经迭代到了
scanWords
的末尾,这将导致下一次调用要
hasNext()
请始终返回一个
false

以下是对您的要求的修复:

while ( scanWords.hasNext() ) {
  word= scanWords.next();
  //for( int i = 0; i < wordList.size(); i++ ) {
  for( String wordInList : wordList ) {
    if( wordInList.equalsIgnoreCase( word ) ) {
      contains = true;
    } else {
      System.out.println( word );
      out.write( word );
    }
  } // for list
} // while scanner

样本执行

List<String> ls = new ArrayList<String>( 4 );
ls.add( "raVi" );
ls.add( "sreekaR" );
ls.add( "lakShMi" );
ls.add( "sumAna" );

String listElements = ls.toString();
System.out.println( "listElements: " + listElements );
System.out.println( "listElements.toLowerCase(): " + listElements.toLowerCase() );
scanner = new Scanner( "Ravi Sumana Others sREEKar LAKshmi" );
while( scanner.hasNext() ) {
  String w1 = scanner.next();
  System.out.println( "'" + w1 + "' is in list ? = " + listElements.toLowerCase().contains( w1.toLowerCase() ) );
}

问题在于,你试图用同样的方法,以错误的顺序做3件不同的事情:

  • 写入文件
  • 在列表中查找一个单词
  • 从扫描仪上读单词
每个操作都应该是单独的。关于您要求的内容:

如何将字符串即word与所有ArrayList元素进行比较, 检查它们是否相等,不考虑大小写

这是完整程序的一部分,应该使用自己的方法(上面列表中的第二个项目符号)。您不需要扫描仪、文件写入程序和缓冲写入程序。您只需要单词和列表。该方法应返回布尔值:

public boolean listContainsWordIgnoringCase(List<String> list, String word) {
public boolean listContainsWordIgnoringCase(列表,字符串字){
而且实现起来非常简单:

public boolean listContainsWordIgnoringCase(List<String> list, String word) {
    for (String element : list) {
        if (word.equalsIgnoreCase(element)) {
            // no need to continue looping. We've found the answer
            return true;
        }
    }
    // we've looped through all the elements without finding a match
    return false;
}
public boolean listContainsWordIgnoringCase(列表,字符串字){
for(字符串元素:列表){
if(字等信号格(元素)){
//不需要继续循环,我们已经找到了答案
返回true;
}
}
//我们在所有元素中循环,没有找到匹配项
返回false;
}
现在这个方法可以在你的程序中使用了


诀窍是在只有一个职责的简单块中分离逻辑。并为每个块创建一个方法。

问题来自这样一个事实,即您试图以错误的顺序,以相同的方法做3件不同的事情:

  • 写入文件
  • 在列表中查找一个单词
  • 从扫描仪上读单词
每个操作都应该是单独的。关于您要求的内容:

如何将字符串即word与所有ArrayList元素进行比较, 检查它们是否相等,不考虑大小写

这是完整程序的一部分,应该使用自己的方法(上面列表中的第二个项目符号)。您不需要扫描仪、文件写入程序和缓冲写入程序。您只需要单词和列表。该方法应返回布尔值:

public boolean listContainsWordIgnoringCase(List<String> list, String word) {
public boolean listContainsWordIgnoringCase(列表,字符串字){
而且实现起来非常简单:

public boolean listContainsWordIgnoringCase(List<String> list, String word) {
    for (String element : list) {
        if (word.equalsIgnoreCase(element)) {
            // no need to continue looping. We've found the answer
            return true;
        }
    }
    // we've looped through all the elements without finding a match
    return false;
}
public boolean listContainsWordIgnoringCase(列表,字符串字){
for(字符串元素:列表){
if(字等信号格(元素)){
//不需要继续循环,我们已经找到了答案
返回true;
}
}
//我们在所有元素中循环,没有找到匹配项
返回false;
}
现在这个方法可以在你的程序中使用了


诀窍是在只有一个职责的简单块中分离逻辑。并为每个块创建一个方法。

我以前尝试过这种方法,问题是它在同一个单词中循环6次。6是我的数组的大小