【Two Sigma】 数字单词混合字符串排序 Mix Sort
2014-03-22 05:54
357 查看
题目:
从stdin读入一行String,String中同时包括单词和数字,以空格分开。需要将输入进行排序,要求:(1)字母和数字分别顺序排序(2)输入中原本是字母/数字的地方依然是字母/数字。
比如输入:d 3 c 2 1 a 输出为 a 1 c 2 3 d
输入:add 6 abb at 输出为 abb 6 add at
思路:
由于单词元素和数字元素是以空格分开的,可以将输入的String解析成单个输入元素的list。然后一一判断这些元素是不是数字,如果是的话,标记所在位置,并将该元素加到一个新的叫integers的list中,再将单词加到另一个叫words的list中。分别对这两个list排序后根据之前标记的位置把排序好的值重新填回去。Java代码如下:
public class MixStringSort {
public static void main(String args[]) throws Exception {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(isr);
String line = null;
//读取输入字符串并用sortString方法来处理
while ((line = reader.readLine()) != null) {
new MixStringSort().sortString(line);
}
}
public void sortString(String line) {
ArrayList<Integer> integers = new ArrayList<Integer>();//存数字
ArrayList<String> words = new ArrayList<String>();//存单词
int index_words = 0, index_integers = 0;
//split输入的String存到list里
String[] stringlist = line.split(" ");
//遍历stringlist把数字加到integers的ArrayList里,把单词加到words
for (int i = 0; i < stringlist.length; i++) {
if (isNumeric(stringlist[i])) {
integers.add(Integer.parseInt(stringlist[i]));
stringlist[i] = "0";//把是数字的地方统一标记为“0”
} else {
words.add(stringlist[i]);
stringlist[i] = "1";//把是单词的地方统一标记为“1”
}
}
//利用库分别对数字和字母排序
Collections.sort(integers);
Collections.sort(words);
for (int i = 0; i < stringlist.length; i++) {
if (stringlist[i] == "0") {//将integers里的数字挨个加到stringlist标记为“0”处
stringlist[i] = String.valueOf(integers.get(index_integers));
index_integers++;
} else {//将words里的单词挨个加到stringlist标记为“1”处
stringlist[i] = words.get(index_words);
index_words++;
}
}
//打印结果
for (int i = 0; i < stringlist.length-1; i++) {
System.out.print(stringlist[i]+" ");
}
System.out.print(stringlist[stringlist.length-1]);
}
//判断输入字符的内容是否是数字
public static boolean isNumeric(String s) {
return s.matches("[-+]?\\d*\\.?\\d+");
}
}
从stdin读入一行String,String中同时包括单词和数字,以空格分开。需要将输入进行排序,要求:(1)字母和数字分别顺序排序(2)输入中原本是字母/数字的地方依然是字母/数字。
比如输入:d 3 c 2 1 a 输出为 a 1 c 2 3 d
输入:add 6 abb at 输出为 abb 6 add at
思路:
由于单词元素和数字元素是以空格分开的,可以将输入的String解析成单个输入元素的list。然后一一判断这些元素是不是数字,如果是的话,标记所在位置,并将该元素加到一个新的叫integers的list中,再将单词加到另一个叫words的list中。分别对这两个list排序后根据之前标记的位置把排序好的值重新填回去。Java代码如下:
public class MixStringSort {
public static void main(String args[]) throws Exception {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(isr);
String line = null;
//读取输入字符串并用sortString方法来处理
while ((line = reader.readLine()) != null) {
new MixStringSort().sortString(line);
}
}
public void sortString(String line) {
ArrayList<Integer> integers = new ArrayList<Integer>();//存数字
ArrayList<String> words = new ArrayList<String>();//存单词
int index_words = 0, index_integers = 0;
//split输入的String存到list里
String[] stringlist = line.split(" ");
//遍历stringlist把数字加到integers的ArrayList里,把单词加到words
for (int i = 0; i < stringlist.length; i++) {
if (isNumeric(stringlist[i])) {
integers.add(Integer.parseInt(stringlist[i]));
stringlist[i] = "0";//把是数字的地方统一标记为“0”
} else {
words.add(stringlist[i]);
stringlist[i] = "1";//把是单词的地方统一标记为“1”
}
}
//利用库分别对数字和字母排序
Collections.sort(integers);
Collections.sort(words);
for (int i = 0; i < stringlist.length; i++) {
if (stringlist[i] == "0") {//将integers里的数字挨个加到stringlist标记为“0”处
stringlist[i] = String.valueOf(integers.get(index_integers));
index_integers++;
} else {//将words里的单词挨个加到stringlist标记为“1”处
stringlist[i] = words.get(index_words);
index_words++;
}
}
//打印结果
for (int i = 0; i < stringlist.length-1; i++) {
System.out.print(stringlist[i]+" ");
}
System.out.print(stringlist[stringlist.length-1]);
}
//判断输入字符的内容是否是数字
public static boolean isNumeric(String s) {
return s.matches("[-+]?\\d*\\.?\\d+");
}
}
相关文章推荐
- 尾单词长度、1 3 9 27 81 实现1-121任意算法、去除重复字符并排序、拼音转数字、按要求分解字符串
- 字符串数字排序Arrays.sort() Comparator的用法
- Dataview根据数字(字符串类型)排序Sort
- 数字字符串数组用Sort排序
- Python根据内嵌的数字将字符串排序(sort by numbers embedded in strings)
- oracle中混合数字与字符的字符串排序
- Java中使用Collections.sort()方法对数字和字符串泛型的LIst进行排序
- uva 10194 Football (aka Soccer)(字符串处理+sort排序)
- List的排序。在一个list里面放入"1","2"..."10","11"...,"99999","100000",使用字符串大小的顺序与解析成的数字的大小进行排序
- 题7字典排序截取地址 字符串转数字
- 获取字符串中的所有英文单词或数字的方法
- 编写一个类,其中包含一个排序的方法Sort(),当传入的是一串整数,就按照从小到大的顺序输出,如果传入的是一个字符串,就将字符串反序输出。
- C#字符串数组中含数字时的排序
- HDOJ1106 排序(字符串数字提取)
- 强大的SQL之SQL Cookbook读书笔记1——对字母数字混合的数据排序
- 判断字符串是否为数字,字母,或者混合
- 选择排序法,排序数字或者字符串
- java使用正则表达式获取字符串中的所有英文单词或数字
- sorted(),list.sort()函数应用排序字符串的ip地址
- python---数据结构与数据类型,list,dict,tuple,排序sort,比较cmp,字符串模版