我有以下代码,将2个字符串作为输入,并根据它们是否为字谜返回Boolean:

import java.util.ArrayList;
import java.util.Scanner;

public class AnagramChecker {

    public static void main(String[] args) {
        Scanner sc = new Scanner (System.in);
        System.out.print ("Enter string 1: ");
        String str1 = sc.nextLine();
        System.out.print ("Enter string 2: ");
        String str2 = sc.nextLine();

        boolean check = isAnagram (str1, str2);
        System.out.println ("Anagram check for '" + str1 + "' and '" + str2 + "': " + check);
        sc.close();
    }
    public static boolean isAnagram (String s1, String s2) {
        if(s1.length() != s2.length())
            return false;
        s1 = s1.toLowerCase();
        s2 = s2.toLowerCase();
        ArrayList<String> myList = new ArrayList<String>();
        for(int i = 0; i < s2.length() ; i++ ){
            myList.add(String.valueOf(s2.charAt(i)));
        }
        for(int i = 0; i < s1.length();i++){
            for(int j = 0; j < myList.size(); j++){
                if(myList.get(j).equals(String.valueOf(s1.charAt(i)))){

                        myList.remove(j);
                        j = 0;
                        break;
                }
            }
        }
        return myList.isEmpty();
    }
}


不过,它在某种程度上受到限制,我正在尝试将其扩展为在以下情况下适用:
-不同的情况,即eager == AGREE
-带有空格的单个词,即eager == a g ree
-不同数量的空格,即" eager" == agree

有没有一种很好的方法将其集成到上面已经编写的代码中,而又省却很多麻烦。任何帮助,不胜感激。谢谢。

最佳答案

就在这里。正则表达式可以解救!您可以使用.replaceAll()中内置的String。传递\ s值将删除所有未打印的空格和字符,例如\ n。我建议您在比较期间使用类似以下的内容:

string1.replaceAll("\\s","").equals(string2.replaceAll("\\s",""));

关于java - 在Java的简洁循环中包装switch语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32974018/

10-16 18:55