2015-10-06 58 views
1

我有以下的代码,需要2个字符串作为输入,并返回布尔他们是否是字谜:结束语switch语句在一个整洁的循环在Java中

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

是否有这个整合到一个非常干净的方式已经写了上面的代码,没有太多的痛苦和重写。任何帮助非常感谢。谢谢。

+0

您想要以不同方式处理它们,还是只删除每个空格并将字符串转换为小写? – Tom

+0

您已经处理了混合大小写。你可以删除所有的空格。 –

+0

能够比较字符串,无论他们在多少空间和位置(前面/中间/后面的字符串)是我最初想到的 – cslecturect

回答

1

我个人会做以下

  • 使用trim()删除前导和traiing空白
  • 使用replace删除空格
  • 使用toLowerCase(),使文本小写
  • convert的串入字符串数组列表
  • sort the arrays
  • 比较阵列 - 如果他们是相同的,那么你有一个字谜
+1

为什么你仍然想使用'trim'if你已经计划使用'替换'? – Tom

+1

修剪也将删除任何特殊字符。我会尽量完整:)但你是对的,它不是绝对必要 – RNJ

3

是的。正则表达式来拯救!您可以使用.replaceAll()中内置的字符串。通过\ s值将删除所有空格和未打印的字符,如\ n。我建议您在比较过程中使用类似如下的内容:

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

一个很好的例子upvote如何_不要比较字符串?好的... – Tom

+0

汤姆,我应该说得更清楚了。我会改变它。我的意思是说,更多的是作为一个“剥去它们的空白和比较”不是“从来没有使用.equals(),所以你可以比较对象值而不是字符串本身!”我的错。 –

+0

你解释正则表达式的含义非常明确,但是因为我真的很看重示例,所以我检查它们是否真的有用。由于OP可能想到的那个简单的错误,那'replaceAll'调用之一可能是错误的。好你已经修好了:)。 – Tom