夹杂数字字母大小写的字符串排序方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/TeckerYu/article/details/51803187

核心步骤概要


过滤

过滤数字等特殊符号,只剩下字母

这里要用到String类自带的replaceAll方法以及表达式进行过滤

分割

将字符串进行单字符分割

这里要用到String类自带的substring方法

排序

将分割得到的单字符String数组进行忽略大小写的排序

这里要用到Arrays类中的sort方法


关键代码演示

写在前面

因为输入的行数和字符串内容任意,所以将每行的字符串直接add入Java的ArrayList动态数组中,接着再装入用length初始化的String字符串数组newArray中,从而避免了从Object类型进行强制转换String[]的风险


字符串过滤演示

for (int i=0;i <elementIndex;i++)
newArray[i] = newArray[i].replaceAll("\\d+","");
//这里演示的是去除数字

拓展:

.replaceAll(“转义符+正则表达式”,”要替换成的字符”);

附表
正则表达式

字符串分割演示

for(int k=0;k<newArray[number].length();k++)
sortArray[k] = newArray[number].substring(k,k+1);
//用一个for循环一次切割一个字符并添加入sortArray中

拓展:

String类常用方法

方法用途 定义
起止字符分割字符串 substring(int beginIndex,int endIndex)
将某字符用作分隔符 split(String regex) return String[]
转成大写字母 toUpperCase()
转成小写字母 toLowerCase()
去掉开始和末尾的空格 trim() return a string
比较字符串 boolean equals(Object anObject)

单字符String数组排序演示

Arrays.sort(sortArray,String.CASE_INSENSITIVE_ORDER);
//不分大小写进行排序

拓展:

Arrays类常用方法

方法用途 定义
将数组排序 sort()
查找数组中的值 binarySearch(object[ ], object key) *先用sort()排序后用
复制数组 int[] copyOf(int[] original,int newLength)
数组中值的替换 fill(int[] a,int val)
待续….

完整代码demo演示

/**
 * Created by Tecker on 2016/6/21.
 */
import java.util.*;

public class UsingArrayList {
    public static void main(String[] args){
        int elementIndex = 1;
        Scanner inputElement = new Scanner(System.in);
        ArrayList elementlist = new ArrayList();
        boolean inputOver = false;
        System.out.printf("请任意输入N行N个字符串\n");
        System.out.printf("当输入inputOver时结束\n");

        do {
            System.out.printf("输入第" + elementIndex + "个字符串\n");
            System.out.printf(">>");
            String input = inputElement.nextLine();
            if (input.equals("inputOver")){
                inputOver = true;
                System.out.println("输入完毕!");
            }
            else {
                elementlist.add(input);
                elementIndex++;
            }
        }while (inputOver == false);      //用do-while语句加上if判断来控制输入N行夹杂数字大小写的字符串
        elementIndex = elementIndex - 1;
        System.out.printf("排序前:\n");
        String[] newArray = new String[elementIndex];
        for (int k=0;k <elementIndex;k++)
            System.out.printf(">> " + elementlist.get(k) + "\n");
        for (int index=0;index <elementIndex;index++)
            newArray[index] = elementlist.get(index).toString();
        for (int i=0;i <elementIndex;i++)
            newArray[i] = newArray[i].replaceAll("\\d+","");
        for (String element : newArray)
            System.out.printf(element +"\n");
        System.out.println("排序后\n");
        for (int listIndex=0;listIndex <newArray.length;listIndex++){
            sortArrays(listIndex,newArray);
        }


    }
    public static void sortArrays(int number,String[] newArray){
        String[] sortArray = new String[newArray[number].length()];
        for(int k=0;k<newArray[number].length();k++){
            sortArray[k] = newArray[number].substring(k,k+1);
        }
        Arrays.sort(sortArray,String.CASE_INSENSITIVE_ORDER);
        String finalString = ">>";
        for (int j=0;j<sortArray.length;j++){
            finalString = finalString.concat(sortArray[j]);
        }
        System.out.println(finalString);
    }

}

PS:本人初学Java,如有任何问题及更好的建议,欢迎批评指正!

展开阅读全文

没有更多推荐了,返回首页