加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 逻辑排序大写字母和数字的混合字符串

发布时间:2020-12-14 19:36:48 所属栏目:Java 来源:网络整理
导读:我有一串大写字母和数字,我必须’逻辑’排序并存储在数据库的字段中.我已经将数据库中的更新/更改/查询部分弄清楚了.我很难对这个字符串进行逻辑排序. 在这里,我希望我能够很好地解释这一点. 鉴于这组字符串 AB1 AB2 AB3 A11 AB10 我需要这些像这样的alpha排
我有一串大写字母和数字,我必须’逻辑’排序并存储在数据库的字段中.我已经将数据库中的更新/更改/查询部分弄清楚了.我很难对这个字符串进行逻辑排序.

在这里,我希望我能够很好地解释这一点.

鉴于这组字符串
AB1
AB2
AB3
A11
AB10

我需要这些像这样的alpha排序

A11
AB1
AB2
AB3
AB10

为了实现这一点,我相信我需要爆炸字符串.因为目前尝试alpha分类产生A11 AB1 AB10 AB2 AB3

编辑:我需要能够存储爆炸字符串和非爆炸字符串,以便能够与其他程序进行排序.

以下是我认为它们需要被分解和存储以便对alpha进行排序的方式

A11  -  A   11
AB1  -  AB   1
AB2  -  AB   2
AB3  -  AB   3
AB10 -  AB  10

有一些常数.该字符串不会超过5个位置.它只包含大写字母和数字.

就我的代码而言,这是我的意思.作家阻止,所以我希望得到一些帮助.我想我需要找到它是否以字母开头,然后找到所有连续的字母,移动那些左边的字母,然后去处理数字,找到所有连续的数字并移动那些右对齐.不确定’A1B1’之类的东西是如何工作的……

for(int ii = 0;ii < sectionString.length() && ii< SECTIONSPACES;ii++){
               System.out.print("    Was previous a number? " + isPreviousANumber +         "n");
try{
    String tmpString = sectionString.substring(ii,ii + 1 );
    int positionInCharArray = Integer.parseInt(tmpString);
    System.out.printf("    Position " + ii + " is number " + positionInCharArray + "n");
    isPreviousANumber = true;        
}catch(Exception e){
    System.out.printf("    Position " + ii + " number is not a number " +      sectionString.substring(ii,ii) + "n");
    isPreviousANumber = false;
    }                   
}

解决方法

这句话“不确定’A1B1’之类的东西是如何工作的……”在某种程度上增加了问题的复杂性.以下内容适用于所有情况.

方法:

将字符串分为标记.令牌是字母或连续的数字运行.将每个数字标记填充到带有前导空格的五个字符.连接标记以生成爆炸字符串.

从5个字符的原始文件中,最长的爆炸字符串将是17个字符.

生成的爆炸字符串可以按任何程序或SQL“ORDERED BY”子句进行排序.

例子:

1A1A1   "    1A    1A    1"
11A11   "   11A   11"
1111A   " 1111A"
22222   "22222"
A1      "A    1"
A1B1    "A    1B    1"
A1C     "A    1C"
A2      "A    2"
A2B1    "A    2B    1"
A10     "A   10"
A10B1   "A   10B    1"
A11     "A   11"
AA1     "AA    1"
AB1     "AB    1"
AB2     "AB    2"
AB10    "AB   10"
ABC     "ABC"

伪代码:

// original = "section" string
exploded = ""
prevdigits = false
for ii from 1 to length(original) {
   ch = original[ii]
   if (ch is a digit) then {
      if not prevdigits then {
         token = ""
         prevdigits = true
      }
      token = token+ch
   } else { // letter
      if prevdigits then {
         exploded = exploded + spaces(5-length(token)) + token
         prevdigits = false
      }
      exploded = exploded + ch
   }
}

-Al.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读