2016-04-14 5 views
0

この2つのユーザ入力がアナグラムであるかどうかを比較するこのコードがあります。しかし、コードを実行して特定の入力を入力すると、プログラムは入力をアルファベット順に正しくソートしません。これは、これまでの私のコードです:私は入力など「ロバート・グレイ」などの名前や大文字を使って何、まだ最初の大文字の文字を並べ替えるように思わユーザ入力のソートとトリミングを伴うバグ

import java.util.Scanner; 
import java.util.*; 

public class Anagram { 


    public static String sort(String s) { 

    char[] sorted = s.toCharArray(); 
    Arrays.sort(sorted); 
    return new String(sorted); 
    } 

    public static String tidy(String s) { 

    String newInput = String.valueOf(s).toLowerCase().replaceAll("^[0-9A-Za-z]", "").trim(); 
    return newInput; 
    } 

    public static String tidy2(String s) { 

    String newInput2 = String.valueOf(s).toLowerCase().replaceAll("[^0-9A-Za-z]", "").trim(); 
    return newInput2; 
    } 

    public static void main(String[] args) { 

    Scanner keyboard = new Scanner(System.in); 
    System.out.print("Enter line: "); 
    String inputLine = keyboard.nextLine(); 
    System.out.print("Enter anagram: "); 
    String inputAnagram = keyboard.nextLine(); 

    inputLine = sort(inputLine); 
    inputLine = tidy(inputLine); 
    inputAnagram = sort(inputAnagram); 
    inputAnagram = tidy(inputAnagram); 

    System.out.println(inputLine); 
    System.out.println(inputAnagram); 

    } 
} 

。しかし、メインメソッド本体のsortとtidyメソッドを切り替えるとうまく動作します。これには理由があり、どのように修正することができますか?

+0

sortメソッドは、値のベースをASCII値でソートします。大文字のascii値が小文字よりも小さいので、大文字が最初に来るのはその理由です。 'tidy'を最初に呼び出してからソートすることができます。それはあなたに正しい結果を与えるでしょう。 –

+0

ありがとう! –

答えて

0

ソート方法では、ASCII値に基づいて並べ替えるArrays.sortメソッドを実行しています。ソート順に小文字の前に大文字が表示されます。しかし、最初に整理したメソッドを呼び出すとソートメソッドを呼び出すと、すべての大文字を小文字に変換する文字列でStringクラスメソッドtoLowerCaseを呼び出すため、このメソッドが機能します。後でsortメソッドを呼び出すと、すべての文字が小文字になっているため、正常に動作します。あなたの問題を解決するには、sortメソッドを呼び出す前に、入力とアナグラムのStringオブジェクトを小文字に変換してください。それでも動作しない場合は教えてください。