Java 按字符串中的值对字符串数组进行排序

Java 按字符串中的值对字符串数组进行排序,java,arrays,string,sorting,int,Java,Arrays,String,Sorting,Int,我已经被这件事难住一段时间了。我有一个字符串数组,所有字符串都包含一些数值,我需要提取这些数值并用于比较,以便对数组进行排序。我曾尝试使用带有比较器的内置排序方法,但没有成功 如果有人能给我一点见解或给我指出正确的方向,我将不胜感激 数组包含格式为“NAME已工作x小时”的字符串 我的目的是提取数字并根据整数的值进行排序,同时保持与名称的关系 public static <T> void sort(T[] a, Comparator<? super T> c) publ

我已经被这件事难住一段时间了。我有一个字符串数组,所有字符串都包含一些数值,我需要提取这些数值并用于比较,以便对数组进行排序。我曾尝试使用带有比较器的内置排序方法,但没有成功

如果有人能给我一点见解或给我指出正确的方向,我将不胜感激

数组包含格式为“NAME已工作x小时”的字符串

我的目的是提取数字并根据整数的值进行排序,同时保持与名称的关系

public static <T> void sort(T[] a, Comparator<? super T> c)

public static void sort(T[]a,Comparator您可以使用
集合。sort
使用
Comparator
对字符串进行排序,并将
字符串解析为
整数
,使您能够按整数对其进行排序

示例:

    String s[] = { "10", "2", "1" };
    Collections.sort(Arrays.asList(s), new Comparator<String>() {

        @Override
        public int compare(String o1, String o2) {
            int i = Integer.parseInt(o1);
            int i2 = Integer.parseInt(o2);
            if (i > i2)
                return 1;
            else if (i < i2)
                return -1;
            else
                return 0;
        }
    });
    System.out.println(Arrays.toString(s));
[1, 2, 10]

您可以使用
集合。sort
使用
比较器对字符串进行排序,并将
字符串
解析为
整数
,使您能够按整数对其排序

示例:

    String s[] = { "10", "2", "1" };
    Collections.sort(Arrays.asList(s), new Comparator<String>() {

        @Override
        public int compare(String o1, String o2) {
            int i = Integer.parseInt(o1);
            int i2 = Integer.parseInt(o2);
            if (i > i2)
                return 1;
            else if (i < i2)
                return -1;
            else
                return 0;
        }
    });
    System.out.println(Arrays.toString(s));
[1, 2, 10]

如果每个字符串仅包含数字,则可以使用ParseInt获取每个字符串的整数值,然后使用常规比较器对其进行排序。如果字符串包含非数字字符和整数,则这会使事情变得复杂,并且您可能希望创建一个帮助器方法来为您完成这些脏活。可能的(尽管效率低下)实现可能看起来像

public static int getNumbersFromString(String string)
{
    String numbers = "";
    for(int i = 0; i < string.length; i++)
    {
        if((int)(string.charAt(i) >= 48 && (int)(string.charAt(i) <= 57)
            numbers += string.charAt(i);
    }
    int foo = Integer.parseInt(numbers);
    return foo;
} 
public static int getNumbersFromString(字符串)
{
字符串编号=”;
for(int i=0;i如果((int)(string.charAt(i)>=48&&(int)(string.charAt(i)如果每个字符串只包含数字,那么您可以使用ParseInt获取每个字符串的整数值,然后使用常规比较器对其进行排序。如果字符串包含非数字字符和整数,那么这会使事情变得复杂,您可能需要使用一个帮助器方法来为您完成脏活。可能的(尽管效率低下)实现可能看起来像

public static int getNumbersFromString(String string)
{
    String numbers = "";
    for(int i = 0; i < string.length; i++)
    {
        if((int)(string.charAt(i) >= 48 && (int)(string.charAt(i) <= 57)
            numbers += string.charAt(i);
    }
    int foo = Integer.parseInt(numbers);
    return foo;
} 
public static int getNumbersFromString(字符串)
{
字符串编号=”;
for(int i=0;i如果((int)(string.charAt(i)>=48&&(int)(string.charAt(i)请确保处理所有边缘情况,但下面的代码应该适合您

public class NumericStringComparator implements Comparator<String> {
    @Override
    public int compare(String str1, String str2) {
        Integer num1 = extractNumericValue(str1);
        Integer num2 = extractNumericValue(str2);

        // handle null/error cases

        return num1.compareTo(num2);
    }

    private static Integer extractNumericValue(String str) {
        // extract numeric value however but as an example
        return Integer.parseInt(str);
    }
}

确保您处理了所有边缘情况,但下面的代码应该适合您

public class NumericStringComparator implements Comparator<String> {
    @Override
    public int compare(String str1, String str2) {
        Integer num1 = extractNumericValue(str1);
        Integer num2 = extractNumericValue(str2);

        // handle null/error cases

        return num1.compareTo(num2);
    }

    private static Integer extractNumericValue(String str) {
        // extract numeric value however but as an example
        return Integer.parseInt(str);
    }
}

你能发布字符串数组吗?你希望它的结果是关于在所有语言中实现“自然排序”有很多答案…可能是@Rod_Algonquin的重复-他有一个字符串数组,如
{“10”,“2”,“1”}
。字符串自然排序的问题(默认
数组。排序(stringArray)
是他将得到的答案是
{“1”、“10”、“2”}
。他需要
{“1”、“2”、“10”}
(整数排序).@TheLostMind-我同意,我认为这就是问题所在。但是,我认为答案是将字符串解析为自定义对象,然后对它们进行排序。我想不出直接处理字符串有什么好处,尤其是如果您的对象具有与字符串方法等效的方法。您可以发布字符串数组吗?以及您希望它显示的结果关于在所有语言中实现“自然排序”有很多答案…可能是@Rod_Algonquin的重复-他有一个字符串数组,比如
{“10”,“2”,“1”}
。字符串自然排序的问题(默认
数组。sort(stringArray)
是他得到的答案是
{“1”,“10”,“2”}
。他需要
{“1”,“2”、“10”}
(整数排序).@TheLostMind-我同意,我认为这就是问题所在。但是,我认为答案是将字符串解析为自定义对象,然后对它们进行排序。我想不出直接处理字符串有什么好处,尤其是如果您的对象具有与字符串方法等效的方法。数组包含的字符串格式为:“NAME已工作x小时。”“-因此,他需要稍微更改他的
compare()
逻辑(基于编辑的问题)。但或多或少,这是正确的答案。+1.数组包含的字符串格式为:“NAME已工作x小时”-因此,他需要稍微更改他的
compare()
逻辑(基于编辑的问题)。但这或多或少是正确的答案。+1.许多答案中的最佳答案IMHO。顺便说一句,如果
extractNumericValue()
返回一个
整数
,则整个比较部分将收缩到
extractValue(str1)。compareTo(extractValue(str2))
许多答案中的最佳答案IMHO.BTW,如果
extractNumericValue()
返回一个
整数
,整个比较部分将收缩到
提取值(str1)。比较到(提取值(str2))