Java 按字符串中的值对字符串数组进行排序
我已经被这件事难住一段时间了。我有一个字符串数组,所有字符串都包含一些数值,我需要提取这些数值并用于比较,以便对数组进行排序。我曾尝试使用带有比较器的内置排序方法,但没有成功 如果有人能给我一点见解或给我指出正确的方向,我将不胜感激 数组包含格式为“NAME已工作x小时”的字符串 我的目的是提取数字并根据整数的值进行排序,同时保持与名称的关系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
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))