Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于java模式拆分字符串-大写字母和数字_Java_Regex_String - Fatal编程技术网

基于java模式拆分字符串-大写字母和数字

基于java模式拆分字符串-大写字母和数字,java,regex,string,Java,Regex,String,我有以下字符串“3/4Ton”。我想把它分成--> 字[1]=3/4,字[2]=t 现在,我的代码如下所示:- Pattern p = Pattern.compile("[A-Z]{1}[a-z]+"); Matcher m = p.matcher(line); while(m.find()){ System.out.println("The word --> "+m.group()); } 它执行所需的任务,根据大写字母拆分字符串,如:- 字符串=机器输入 字[1]=机

我有以下字符串“3/4Ton”。我想把它分成-->

字[1]=3/4,字[2]=t

现在,我的代码如下所示:-

Pattern p = Pattern.compile("[A-Z]{1}[a-z]+");
Matcher m = p.matcher(line);
while(m.find()){
    System.out.println("The word --> "+m.group());
    }
它执行所需的任务,根据大写字母拆分字符串,如:-

字符串=机器输入

字[1]=机械,字[2]=输入

唯一的问题是,它没有保留数字、缩写或大写字母序列,而这些都不是单独的单词。有人能帮我解决正则表达式编码问题吗


提前感谢…

在这里使用regex会很好。我打赌也有办法做到,尽管我不是一个喜欢在葡萄藤上荡秋千的人,所以我帮不了你。然而,有些东西是你无法避免的——有些东西,某个地方最终需要在你的字符串上循环。您可以“自己”这样做:

并得到以下输出:

3/4
Ton tru
Ck
Start with
Capital

实际上,您可以在regex中单独使用lookahead和lookahead来实现这一点 (请参见本页的特殊结构:)


肖恩

一个“单词”的开头是什么?它不能是任何大写字母或数字,因为“3/4”将是两个单词,“3/”和“4”。我认为在得到一个好的答案之前,你需要更精确地定义你的规则。一个数字或大写字母。我所困惑的是如何将两个需求合并到一个正则表达式中?我需要知道使用正则表达式的最佳方式是什么,以便我的程序能够以数字或大写字母为起点分割字符串。谢谢你的帮助。它确实给了我一种方向感,并向我展示了一种不同的方法。我在这行“|”(你是对的,有一个+缺失(当我添加文档时丢失了)我马上就把它加起来。顺便说一下,如果你有兴趣在将来支持重音大写字符或其他语言,你应该考虑\p{Lu}而不是\p{Loop}。
public static void main(String[] args) {
    String test = "3/4 Ton truCk";
    String[] arr = splitOnCapitals(test);
    for(String s : arr) System.out.println(s);

    test = "Start with Capital";
    arr = splitOnCapitals(test);
    for(String s : arr) System.out.println(s);
}
3/4
Ton tru
Ck
Start with
Capital
/**
 * We'll use this pattern as divider to split the string into an array.
 * Usage: myString.split(DIVIDER_PATTERN);
 */
private static final String DIVIDER_PATTERN =

        "(?<=[^\\p{Lu}])(?=\\p{Lu})"
                // either there is anything that is not an uppercase character
                // followed by an uppercase character

                + "|(?<=[\\p{Ll}])(?=\\d)"
        // or there is a lowercase character followed by a digit

        ;

@Test
public void testStringSplitting() {
    assertEquals(2, "3/4Word".split(DIVIDER_PATTERN).length);
    assertEquals(7, "ManyManyWordsInThisBigThing".split(DIVIDER_PATTERN).length);
    assertEquals(7, "This123/4Mixed567ThingIsDifficult"
                        .split(DIVIDER_PATTERN).length);
}
for(String word: myString.split(DIVIDER_PATTERN)){
    System.out.println(word);
}