2016-04-14 26 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); 

    } 
} 

當我輸入一個名稱,如「羅伯特·格雷」或大寫字母任何東西,它似乎仍然對大寫字母排序第一。但是,當我切換主要方法體中的排序和整齊方法時,它工作正常。是否有這個原因,如何解決?

+0

排序方法基於ASCII值對值進行排序。由於大寫字母的ascii值小於小寫字母,這就是大寫字母首先出現的原因。你可以先調用'tidy'然後對它進行排序。那會給你正確的結果。 –

+0

非常感謝! –

回答

0

在你的排序方法,你正在做的Arrays.sort這種種基於ASCII值的方法。大寫字母出現在排序順序的小寫字母之前。但是當你第一次,然後打電話給你的整潔方法排序方法是可行的,因爲你是在其將所有的大寫字母爲小寫字符串調用String類方法toLowerCase。稍後當您調用排序方法時,它可以正常工作,因爲所有字母現在都是小寫字母。爲了解決您的問題,請在調用排序方法之前,將您的輸入和anagram字符串對象轉換爲小寫。讓我知道它是否仍然無效。