所以我有一个字符串数组,我想将单词拆分成数字(或十进制数字),保留字符并将它们放入一个数组中.我用积极的眼光来留住其他角色.所以"600克"应该分成{"600","g"},"培根"不应该分成:{"培根"},"1,54克"应该分成{"1,54","g"}

import java.util.Arrays;

class HelloWorld {
    public static void main(String[] args) {
        String[] Words = {"bacon", "1,54g", "eggs", "600g", "jalapeno.300g"};
            for (int i = 0; i < Words.length; i++) {
                String[] SplitWord = Words[i].split("(?=\\d+[.,]\\d+|\\d+)");
                System.out.println(Words[i]);
                System.out.println(Arrays.toString(SplitWord));
        }
    }
}

输出:

bacon
[bacon]
1,54g
[1,, 5, 4g]
eggs
[eggs]
600
[6, 0, 0]
jalapeno.300g
[jalapeno., 3, 0, 0g]

我认为正则表达式是有问题的,但无法使其他正则表达式正常工作.

"[0-9]+[.,][0-9]+|[0-9]+"

推荐答案

您可以通过断言什么应该或不应该位于当前位置的左侧和右侧来使模式更具体地进行拆分.

(?<=\d)(?=[a-zA-Z])|(?<=[^\d\s][.,])(?=\d)

模式匹配:

  • (?<=\d)(?=[a-zA-Z])表示数字位于左侧,a-Za-Z位于右侧
  • |
  • (?<=[^\d\s][.,])(?=\d)断言一个字符,而不是数字或空白字符,后面跟.,向左,数字向右

请看regex demo.

或者在第一次展望时考虑到gkg:

(?i)(?<=\d)(?=k?g\b)|(?<=[^\d\s][.,])(?=\d)

再看regex demo

例如:

import java.util.Arrays;

class HelloWorld {
    public static void main(String[] args) {
        String[] Words = {"bacon", "1,54g", "eggs", "600g", "jalapeno.300g"};
        for (String word : Words) {
            String[] SplitWord = word.split("(?<=\\d)(?=[a-zA-Z])|(?<=[^\\d\\s][.,])(?=\\d)");
            System.out.println(word);
            System.out.println(Arrays.toString(SplitWord));
        }
    }
}

输出

bacon
[bacon]
1,54g
[1,54, g]
eggs
[eggs]
600g
[600, g]
jalapeno.300g
[jalapeno., 300, g]

Java相关问答推荐

Proguard配置以保留具有参数的注释的成员

如何让HikariCP指标在NewRelic中正确显示?

日食IDE 2024-03在Ubuntu下崩溃,导致hr_err_pid.log

OpenJDK、4K显示和文本质量

强制Mockito返回null而不是emtpy list

方法没有用正确的值填充数组—而是将数组保留为null,'

上下文初始化期间遇到异常-使用Java配置配置HibernateTemplate Bean时

内存中的H2修剪尾随空格

尽管通过中断请求线程死亡,但线程仍将继续存在

如何从日期中截取时间并将其传递给组件?

JNI:将代码打包成自包含的二进制文件

如何在Jooq中获取临时表列引用?

在不使用instanceof或强制转换的情况下从父类变量调用子类方法

我的代码是线程安全的吗?[Java、CAS、转账]

处理4.3问题:javax.xml.ind包不存在(&Q;).您可能在学习GitHub教程时遗漏了库.&Q

如何在特定关键字后提取与模式匹配的多个值?

javax.crypto-密码对象-提供者服务是如何工作的?

当我将鼠标悬停在javafxTextArea上时,如何更改鼠标光标?

在外部类和内部类之间,当调用外部类内部或外部的主方法时,它们的静态初始化程序的运行顺序不同

如何在 Android Studio 中删除 ImageView 和屏幕/父级边缘之间的额外空间?