Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 排序和修剪用户输入的错误_Java_Sorting - Fatal编程技术网

Java 排序和修剪用户输入的错误

Java 排序和修剪用户输入的错误,java,sorting,Java,Sorting,我有一段代码,用来比较两个用户输入是否是字谜。但是,当我运行代码并输入特定的输入时,程序不会按字母顺序正确地对输入进行排序。这是我目前的代码: import java.util.Scanner; import java.util.*; public class Anagram { public static String sort(String s) { char[] sorted = s.toCharArray(); Arrays.sort(sorted);

我有一段代码,用来比较两个用户输入是否是字谜。但是,当我运行代码并输入特定的输入时,程序不会按字母顺序正确地对输入进行排序。这是我目前的代码:

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);

  }
}

当我输入诸如“Robert Gray”或任何大写字母的名称时,它似乎仍然会首先对大写字母进行排序。但是,当我在main方法主体中切换sort和tidy方法时,效果很好。这是有原因的吗?如何修复它?

在排序方法中,您使用的是Arrays.sort方法,它基于ASCII值进行排序。大写字母按排序顺序出现在小写字母之前。但是,当您首先调用tidy方法,然后再调用sort方法时,它会工作,因为您正在对字符串调用String类方法toLowerCase,该方法会将所有大写字母转换为小写。稍后当您调用sort方法时,它可以正常工作,因为所有字母现在都是小写的。为了解决问题,在调用sort方法之前,只需将输入和字谜字符串对象转换为小写。如果仍然不起作用,请告诉我。

排序方法根据ASCII值对值进行排序。因为大写字母的ascii值小于小写字母,所以大写字母排在第一位。您可以先调用
tidy
,然后对其进行排序。这将给你正确的结果。非常感谢!