2015-10-06 49 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