今天我接受了采访,并且我被要求对包含String和Integers的列表进行排序。这就像这样
输入:
汽车公交车4 -5苹果3 -1输出:
苹果巴士-5 -1车3 4我一开始就被困住,因为我从未见过这样的东西,但我试图做的是创建2个子列表,一个持有字符串,另一个持有int.I做了这个,但时间已经到了我无法完成。
此外,我被困在我尝试循环列表的部分,并检查它的字符串是否添加元素到子列表1,如果它的int比将元素添加到子列表2.我被困在这里bcoz我不知道怎么能我检查元素是否为String或Int。
如果我在错误的部分或其他地方发布了这个问题,也很抱歉。可以随意将此问题移至正确的部分。
谢谢
答案 0 :(得分:2)
我会使用两个列表,对它们进行排序,但您必须记住原始排序,LinkedList<Boolean>
足以完成该任务。
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();
}
答案 1 :(得分:1)
假设-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;
}
}
注意:输出结果为apple bus -5 -1 car 3 4
,因为-5 < -1
而不是你的OP