Java 对混合数据列表进行排序?
今天我接受了一次采访,在采访中,我被要求对一个包含字符串和整数的列表进行排序 输入: 汽车巴士4-5苹果3-1 输出: 苹果巴士-5-1车3 4 一开始我被卡住了,因为我从来没有见过这样的事情,但我试着创建两个子列表,一个包含字符串,另一个包含int。我这样做了,但时间已经到了,我无法完成 此外,我在尝试循环列表的部分遇到了问题,我检查了它的字符串是否大于将元素添加到子列表1,以及它的int是否大于将元素添加到子列表2。我在这里遇到了问题,因为我不知道如何检查元素是string还是int 如果我把这个问题放在了错误的地方,也很抱歉。请随意把这个问题移到正确的地方Java 对混合数据列表进行排序?,java,algorithm,list,sorting,collections,Java,Algorithm,List,Sorting,Collections,今天我接受了一次采访,在采访中,我被要求对一个包含字符串和整数的列表进行排序 输入: 汽车巴士4-5苹果3-1 输出: 苹果巴士-5-1车3 4 一开始我被卡住了,因为我从来没有见过这样的事情,但我试着创建两个子列表,一个包含字符串,另一个包含int。我这样做了,但时间已经到了,我无法完成 此外,我在尝试循环列表的部分遇到了问题,我检查了它的字符串是否大于将元素添加到子列表1,以及它的int是否大于将元素添加到子列表2。我在这里遇到了问题,因为我不知道如何检查元素是string还是int 如果我
谢谢我将使用两个列表,对它们进行排序,但您必须记住原始顺序,
LinkedList
足以完成该任务
public static String sortString(String input) {
Scanner s = new Scanner(input);
LinkedList<String> strings = new LinkedList<String>();
LinkedList<Integer> integers = new LinkedList<Integer>();
LinkedList<Boolean> types = new LinkedList<Boolean>();
while(s.hasNext()) {
String nextToken = s.next();
try {
int nextInteger = Integer.parseInt(nextToken);
integers.add(nextInteger);
types.add(true);
} catch(NumberFormatException e) {
strings.add(nextToken);
types.add(false);
}
}
Collections.sort(strings);
Collections.sort(integers);
StringBuilder builder = new StringBuilder();
Iterator<Boolean> iter = types.iterator();
while(iter.hasNext()) {
boolean currType = iter.next();
if (currType) {
builder.append(integers.remove(0));
} else {
builder.append(strings.remove(0));
}
if (iter.hasNext()) builder.append(" ");
}
return builder.toString();
}
公共静态字符串排序字符串(字符串输入){
扫描仪s=新扫描仪(输入);
LinkedList字符串=新建LinkedList();
LinkedList整数=新LinkedList();
LinkedList类型=新建LinkedList();
而(s.hasNext()){
字符串nextToken=s.next();
试一试{
int-nextoteger=Integer.parseInt(nextToken);
整数.add(nextInteger);
类型。添加(true);
}捕获(数字格式){
strings.add(nextToken);
类型。添加(false);
}
}
Collections.sort(字符串);
集合。排序(整数);
StringBuilder=新的StringBuilder();
迭代器iter=types.Iterator();
while(iter.hasNext()){
布尔currType=iter.next();
如果(当前类型){
builder.append(integers.remove(0));
}否则{
builder.append(strings.remove(0));
}
if(iter.hasNext())builder.append(“”);
}
返回builder.toString();
}
假设-1
和-5
是int
一个简单的解决方案:
public String sortStringWithInts(String input){
String[] parts = input.split("\\s");
List<String> strings = new ArrayList<String>();
List<Integer> ints = new ArrayList<Integer>();
for(String part:parts){
if(isNumber(part)){
ints.add(Integer.valueOf(part));
}
else{
strings.add(part);
}
}
Collections.sort(strings);
Collections.sort(ints);
return createResult(strings, ints, parts);
}
private String createResult(List<String> strings, List<Integer> ints, String[] parts) {
StringBuilder result = new StringBuilder();
for(String part:parts){
if(isNumber(part)){
result.append(ints.remove(0)).append(" ");
}
else{
result.append(strings.remove(0)).append(" ");
}
}
return result.toString();
}
private boolean isNumber(String part) {
try{
Integer.valueOf(part);
return true;
}
catch(Exception e){
return false;
}
}
publicstringsortstringwithints(字符串输入){
String[]parts=input.split(\\s”);
列表字符串=新的ArrayList();
List ints=new ArrayList();
对于(字符串部分:部分){
如果(isNumber(part)){
整数相加(整型值(部分));
}
否则{
字符串。添加(部分);
}
}
Collections.sort(字符串);
集合。排序(ints);
返回createResult(字符串、整数、部分);
}
私有字符串createResult(列表字符串、列表整数、字符串[]部分){
StringBuilder结果=新建StringBuilder();
对于(字符串部分:部分){
如果(isNumber(part)){
result.append(ints.remove(0)).append(“”);
}
否则{
result.append(strings.remove(0)).append(“”);
}
}
返回result.toString();
}
专用布尔值isNumber(字符串部分){
试试{
整数值(部分);
返回true;
}
捕获(例外e){
返回false;
}
}
注意:输出将是:
apple bus-5-1 car 3 4
,因为-5<-1
与您的OP不同Re:检查字符串或int:尝试解析它?什么是“更高”,数字还是字符串?输入结果如何,都是字符串?我要向面试官指出的第一件事是,-1
也是字符串。。。然后,我将讨论区分差异的方法(可能尝试解析它并try/catch(numberformatception)
…)@DaveNewton解析正是我想到的。他向我展示了我上面所写的输出。我想他希望我在排序时优先考虑单词而不是数字。他没有说输入是如何产生的。他说是字符串和整数的组合。谢谢你的回答。@durron597解析出现在我的脑海中,但我我想我失去了它,因为时间即将结束,我承受着压力:)而且我想每次尝试解析每个元素都会花费很多时间,所以有没有其他方法?感谢您的回复。为什么是-1-5
?输出中应该是-5-1