Java比较包含字符和数字的字符串

Java比较包含字符和数字的字符串,java,string,compare,Java,String,Compare,在Java中,我想对包含字符和数字的字符串进行比较和排序。例如: A15、D35、A17、C45、B27、C30应分类 A15 A17 B27 C30 C45 D35。我不确定如何比较这两个元素,因为它们包含一个字符串和一个数字。有人能帮我吗?如果你的数字总是两位数,那么只需将整个数字作为字符串进行比较即可。十进制数字也是字符串 如果您需要对A9、A54和A123456进行排序,并希望数字按其数值排序,则情况就不同了。在这种情况下,您可能需要编写自己的比较函数,将字符串拆分为其组成部分。所述比较

在Java中,我想对包含字符和数字的字符串进行比较和排序。例如:

A15、D35、A17、C45、B27、C30应分类


A15 A17 B27 C30 C45 D35。我不确定如何比较这两个元素,因为它们包含一个字符串和一个数字。有人能帮我吗?

如果你的数字总是两位数,那么只需将整个数字作为字符串进行比较即可。十进制数字也是字符串


如果您需要对A9、A54和A123456进行排序,并希望数字按其数值排序,则情况就不同了。在这种情况下,您可能需要编写自己的比较函数,将字符串拆分为其组成部分。

所述比较函数的示例:

import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import com.google.common.collect.Lists;

class Scratch {

    public static void main(String[] args) {
        final List<String> in = Lists.newArrayList("D35", "A1", "C7", "A25", "A131");

        Collections.sort(in, new Comparator<String>() {
            @Override
            public int compare(String left, String right) {
                int letter = Character.compare(left.charAt(0), right.charAt(0));
                if (0 != letter)
                    return letter;

                return Long.compare(Long.parseLong(left.substring(1)), Long.parseLong(right.substring(1)));
            }
        });

        System.out.println(in);
    }
}
import java.util.Collections;
导入java.util.Comparator;
导入java.util.List;
导入com.google.common.collect.list;
课堂擦伤{
公共静态void main(字符串[]args){
最终列表in=Lists.newArrayList(“D35”、“A1”、“C7”、“A25”、“A131”);
Collections.sort(在新的Comparator()中){
@凌驾
公共整数比较(左字符串、右字符串){
int字母=Character.compare(左.charAt(0),右.charAt(0));
如果(0!=字母)
回信;
返回Long.compare(Long.parseLong(左.子字符串(1)),Long.parseLong(右.子字符串(1));
}
});
系统输出打印项次(输入);
}
}
公共类StringComparator实现Comparator{
字符串字符串_char[]={“a”、“s”、“d”、“f”、“g”、“h”、“j”、“k”、“l”、“z”、“x”、“c”、“v”、“b”、“n”、“m”、“q”、“w”、“e”、“r”、“t”、“y”、“u”、“i”、“o”、“p”};
公共枚举数据类型{
字符串,整数,特殊字符;
}
公共整数getDataTypePriority(数据类型){
试一试{
开关(类型){
特殊情况字符:
返回1;
大小写整数:
返回2;
大小写字符串:
返回3;
违约:
打破
}
}捕获(例外e){
e、 printStackTrace();
}
返回null;
}
公共布尔值isStringType(字符串值){
用于(字符串温度:字符串字符)
if(温度等信号情况(val))
返回true;
返回false;
}
公共数据类型getDataType(字符val){
数据类型=null;
试一试{
Integer.parseInt(val.toString());
type=DataType.INTEGER;
}捕获(例外e){
if(IsString类型(val.toString()))
type=DataType.STRING;
其他的
type=DataType.SPECIAL\u CHAR;
}
返回类型;
}
@凌驾
公共整数比较(字符串新值,字符串旧值){
int结果=0;
试一试{
if(new_val==null)
返回-1;
else if(old_val==null)
返回1;
StringBuilder old_Int=新StringBuilder();
StringBuilder new_Int=new StringBuilder();
数据类型oldDataType=null;
DataType newDataType=null;
int old_length=old_val.length();
int new_length=new_val.length();
int max=旧长度;
如果(新长度<旧长度)//等于
最大值=新值长度();
StringBuilder old_Char=新StringBuilder();
StringBuilder new_Char=新StringBuilder();
对于(int i=0;i getDataTypePriority(oldDataType))
返回1;
其他的
返回-1;
}否则{//相同
if(newDataType.equals(DataType.STRING)){
如果(old_Int.length()>0){//清除字符串生成器
old_Int.setLength(0);
新的整定长度(0);
}
if(new_Char.toString().compareTo(old_Char.toString())>0)
返回1;
else if(new_Char.toString().compareTo(old_Char.toString())<0)
返回-1;
}else if(newDataType.equals(DataType.INTEGER)){
old_Int.append(old_val.charAt(i));
新字符附加(新字符(i));
而(i+1最大值){
而(i+1<新长度){
i+=1;
newDataType=getDataType(new_val.charAt(i));
if(newDataType.equals(DataType.INTEGER))
新字符附加(新字符(i));
其他的
打破
}
}否则如果(旧长度>最大值){
while(i+1o)
返回1;
else if(n0){//清除字符串生成器
old_Int.setLength(0);
新的整定长度(0);
}
if(new_Char.toString().compareTo(old_Char.toString())>0)
返回1;
else if(new_Char.toString().compareTo(old_Char.toString())<0)
返回-1;
}
}
}
将新值比较返回到(旧值);
}捕获(例外e){
e、 printStackTrace();
}
返回结果;
}
}

基本上,如果需要对字符串列表进行排序,可以使用流:

     List<String> yourSortedListOfStrings = yourListOfStrings.stream()
        .sorted()
        .collect(Collectors.toList());
List yourSortedListOfStrings=yourListOfStrings.stream()
.分拣机
     List<String> yourSortedListOfStrings = yourListOfStrings.stream()
        .sorted()
        .collect(Collectors.toList());