当前位置: 首页 > 面试题库 >

Java-拆分字符串,为字母数字

侯和惬
2023-03-14
问题内容

输入示例:

RC23
CC23QQ21HD32
BPOASDf91A5HH123

输出示例:

[RC,23]
[CC,23,QQ,21,HD,32]
[BPOASDf,91,A,5,HH,123]

字母和数字部分的长度不固定。

我知道如何将split()与regex一起使用,//.' ' ' '([a-z])但是尽管我检查了split()Java
API,但找不到任何可以帮助我解决此问题的东西。

有没有办法split()做到这一点?或者我需要使用另一种方法来拆分这些字符串

任何帮助,将不胜感激。


问题答案:

试试这个正则表达式: "((?<=[a-zA-Z])(?=[0-9]))|((?<=[0-9])(?=[a-zA-Z]))"

这是一个正在运行的示例:http :
//ideone.com/c02rmM

{
    ...
    String someString = "CC23QQ21HD32";
    String regex = "((?<=[a-zA-Z])(?=[0-9]))|((?<=[0-9])(?=[a-zA-Z]))";
    System.out.println(Arrays.asList(someString.split(regex)));
    //outputs [CC, 23, QQ, 21, HD, 32]
    ...
}

正则表达式使用 前瞻性 (?=ValueToMatch)回头看 (?<=ValueToMatch)

它的前半部分(在|之前)问:“上一个字符是字母(?<=[a-zA-Z])吗?下一个字符是数字(?=[0-9])吗?”
如果两者都为真,则将字符串与正则表达式匹配。

该正则表达式的后半部分正相反。它会问:“前一个字符是数字(?<=[0-9])吗?下一个字符是字母吗?(?=[a-zA-Z])”,如果两个都是正确的,它将再次匹配。

通常,split()会删除正则表达式匹配的字符。即使对于此正则表达式也是如此。但是,由于正则表达式与0宽前瞻匹配,因此不会删除您要查找的实际字符。



 类似资料:
  • 问题内容: 所以我有一个像这样的字符串 我想做的就是分割此字符串,以便得到以下信息: 的作为对所述第三元件是指示所述的单原子性质元件。相同。这实际上是我正在努力的部分。 这是一个化学方程式,因此我需要根据元素的名称和存在的原子数量等来分离元素。 问题答案: 您可以尝试这种方法: 输出: 原子:[C,3,H,20,I,1,O,1] 现在所有偶数索引(0、2、4 …)都是原子,奇数是关联的数字: 输出

  • 问题内容: 我需要将一个String拆分为单个字符String的数组。 例如,拆分“ cat”将得到数组“ c”,“ a”,“ t” 问题答案: 这将产生

  • 问题内容: 我认为这是一个简单的问题,但是我找不到简单的解决方案(例如,少于10行代码:) 我有一个诸如,我需要将其转换为。 请注意,首字母不是大写。 问题答案: 您可以将正则表达式使用零宽度正向超前-它可以找到大写字母,但不会将它们包括在定界符中: ,后跟,但不包含在match中。因此,匹配一个空序列后跟一个大写字母,并将其用作定界符。 有关Java regexp语法的更多信息,请参见javad

  • 问题内容: 为什么这段代码的第二行抛出? 尽管这可行: 我使用Java 7。 问题答案: 如果要分割成文字的点,则需要转义该点: 否则,你将在regex上拆分.,这意味着“任何字符”。 请注意在正则表达式中创建单个反斜杠所需的双反斜杠。 因为输入字符串只是一个点,所以得到一个,即”.”,这是一个边沿情况,当在点上分割时会产生一个空数组;从结果中删除所有尾随的空白,但是由于在点上分割点仅留下两个空白

  • 问题内容: 我正在尝试找到一种将String拆分为String数组的方法,并且每当遇到白色香料时就需要对其进行拆分,例如 “嗨,我是保罗” 进入” “嗨”“我”“保罗” 如何使用RegularExpression在split()方法中表示空格? 问题答案: 您需要一个正则表达式,例如,这意味着: 每当遇到至少一个空格时就进行拆分 。完整的Java代码是:

  • 问题内容: 所以我想在java中的任何非字母数字字符上拆分字符串。 目前我一直在这样做 但是我想在其中保留撇号(“’”)。是否有任何正则表达式可以保留撇号,但会踢掉其余的垃圾?谢谢。 问题答案: 只需将其添加到角色类即可。等价于,然后可以将其添加到中。 请注意,但是实际上还包括下划线。如果您还想在下划线上进行分割,则应该改用下划线。