您的位置:首页 > 编程语言 > Java开发

Java排序string数组

2012-09-02 23:48 197 查看
简述:

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();
}
}
}


输入及输出:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: