【发布时间】:2019-05-02 07:10:52
【问题描述】:
在我的编码中,我得到了基于名称的排序输出。但是,如果我输入相同的名称,则数组保持不变。有什么办法,当名称相同时,数字将被排序?提前致谢。
public class InsertionSort {
/*Function to sort array using insertion sort*/
void sort(String str[])
{
int n = str.length;
for (int i=1; i<n; ++i)
{
String key = str[i];
int j = i-1;
/* Move elements of arr[0..i-1], that are
greater than key, to one position ahead
of their current position */
while (j >= 0 && key.compareTo(str[j]) < 0)
{
str[j+1] = str[j];
j = j-1;
}
str[j+1] = key;
}
}
/* A utility function to print array of size n*/
static void printArray(String str[])
{
int n = str.length;
for (int i=0; i<n; ++i)
System.out.print(str[i] + " ");
System.out.println();
}
// Driver method
public static void main(String args[])
{
String[] str ={"asif44","asif435"}; //2 elements
printArray(str);
}
}
【问题讨论】:
-
你有一个字符串数组,到目前为止一切顺利。什么不起作用?你指的是哪个“数字”?您是指字符串中包含的数字吗?如果是这样,您显然必须拆分值,然后进行 2 步比较,否则它只是发生在字符串上的字典排序
-
我的意思是名字后面的数字..比如asif44
-
是的,我看到了。你必须先将字符串拆分为part1和part2,然后才能进行比较,首先比较part1作为字符串比较,然后比较part2作为数字比较。
-
这里是按字数边界分割字符串的正则表达式:
String regex = "(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)";- 其余的由你决定,非常简单
标签: java