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

标签 java algorithm sorting

我有一个由大写字母和数字组成的字符串,我必须对其进行“逻辑”排序并存储在数据库的一个字段中。我已经弄清楚了数据库的更新/更改/查询部分。我正在努力对这个字符串进行逻辑排序。

说到这里,我希望我能解释清楚。

给定这组字符串 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"
11111   "11111"
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
   }
}

-铝

关于java - 逻辑排序大写字母和数字的混合字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19117717/

相关文章:

Oracle SQL - 分配到存储桶中

c# - 同时排序 (C#)?

java - 尝试将字符串解析为 int 时出错

java - 使用 MessageFormat 中的 Locale 递归格式化

java - 在 Java 中计算字符

java - 是否有一种有效的算法用于具有有限数量的部分的整数分区?

algorithm - 编程珍珠问题 : Checking for sorted array in binary search

javascript 对 HTML 元素进行就地排序

java - 如何在java中创建不可变类

java - 需要计时器或其他想法来允许代码在调用方法和 JOptionPane 后继续执行