2016-04-14 25 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字符串对象转换为小写。让我知道它是否仍然无效。