简述:
Java获取输入之后,存到list里 , 按照字符串快速排序(数字优先于含有非数字的字符串)
知识点:
1. 字符串读入,存取
2. 快速排序
3. List与Array数据结构的转换
代码:
package sort_string;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;
public class SortString {
/**
* Sort Class
* @param array or list
*/
private static class Sort{
private String[] strArray = null;
public Sort(String[] strArray){
this.strArray = strArray;
}
public Sort(List<String> strList){
this.strArray = new String[strList.size()];
this.strArray = strList.toArray(this.strArray);
}
private boolean CheckNum(String str){
for(int i = 0;i < str.length();i++){
if(str.charAt(i) > '9' || str.charAt(i) < '0')
return false;
}
return true;
}
private boolean CompareTwoStrings(String a, String b){
if(CheckNum(a) && CheckNum(b)){
if(a.length() > b.length()){
int numOfZeroAddedOfB = a.length() - b.length();
StringBuilder zeros_of_b = new StringBuilder();
for(int i = 0;i < numOfZeroAddedOfB;i++){
zeros_of_b.append("0");
}
b = zeros_of_b.toString() + b;
}else{
int numOfZeroAddedOfA = b.length() - a.length();
StringBuilder zeros_of_a = new StringBuilder();
for(int i = 0;i < numOfZeroAddedOfA;i++){
zeros_of_a.append("0");
}
a = zeros_of_a.toString() + a;
}
}
return a.compareTo(b) > 0 ? true : false;
}
private int Partition(int start, int end){
String baseValue = strArray[start];
int basePos = start;
for(int i = start + 1;i <= end;i++){
if(CompareTwoStrings(baseValue, strArray[i])){
basePos++;
Swap(basePos, i);
}
}
Swap(start, basePos);
return basePos;
}
private void QuickSort(int start, int end){
if(start < end){
int basePos = Partition(start, end);
QuickSort(start, basePos - 1);
QuickSort(basePos + 1, end);
}
}
private void Swap(int pos1, int pos2){
String tempValue = strArray[pos1];
strArray[pos1] = strArray[pos2];
strArray[pos2] = tempValue;
}
public String[] getSortedArray(){
try{
QuickSort(0, strArray.length - 1);
}catch(NullPointerException e){
System.out.print("null array!");
}
return strArray;
}
public List<String> getSortedList(){
try{
QuickSort(0, strArray.length - 1);
}catch(NullPointerException e){
System.out.print("null array!");
}
return java.util.Arrays.asList(this.strArray);
}
}
/**
* Test Main
*/
public static void main(String[] args){
InputStream inputStream = System.in;
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferReader = new BufferedReader(inputStreamReader);
try{
String[] strArray = null;
String lineStr = null;
while(!(lineStr = bufferReader.readLine()).equals("")){
//use space to split
strArray = lineStr.split(" ");
}
// start to sort and results output
Sort sort = new Sort(strArray);
for(String str : sort.getSortedList()){
System.out.println(str);
}
}catch(IOException e){
e.printStackTrace();
}
try{
bufferReader.close();
inputStreamReader.close();
inputStream.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
输入及输出: