Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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,我尝试运行此测试: @Test public void moveLastUpdateToFirstLine() throws Exception { StringUtils stringUtils = new StringUtils(); String newString = stringUtils.moveLastUpdateToFirstLine("bbbbbbb last_update : 188908098 cccc"); assert (newString.eq

我尝试运行此测试:

@Test
public void moveLastUpdateToFirstLine() throws Exception {
    StringUtils stringUtils = new StringUtils();
    String newString = stringUtils.moveLastUpdateToFirstLine("bbbbbbb last_update : 188908098 cccc");
    assert (newString.equals("last_update : 188908098 bbbbbbb cccc"));
}



public String moveLastUpdateToFirstLine(String venueConfigurationStr) {
    Pattern pattern = Pattern.compile("(last_update : \\d+)");
    Matcher matcher = pattern.matcher(venueConfigurationStr);

    if (matcher.find()) {
        venueConfigurationStr = matcher.group(1) + venueConfigurationStr.replace(matcher.group(1), "");
    }
    return venueConfigurationStr;
}
但它说:

java.lang.IllegalStateException: No match found

at java.util.regex.Matcher.group(Matcher.java:536)

如何修复我的匹配器?

您的代码很好,只是太多了。请尝试以下方法:

public String moveLastUpdateToFirstLine(String venueConfigurationStr) {
    return venueConfigurationStr.replaceAll("(.*)(last_update : \\d+ )(.*)", "$2$1$3");
}

注意:这也修复了代码中有关空格的错误。

您可以检查matcher.matches()而不是matcher.find()?您的
模式需要匹配整行。可以用
*
环绕它,或者适当地设置选项。当我测试该代码时,它工作正常(尽管它在
newString
中缺少一个空格)。@Clive no。此代码正常。也许您正在考虑匹配整个字符串的
String.matches()
。顺便问一下,您将如何修复我的正则表达式?@elad如果您指的是空格,请像我所做的那样:在组中的数字后面捕获一个空格。顺便说一句,您的方法不需要任何括号-只需使用
group(0)
group()
谢谢,请查看我的更新-我如何解决多行字符串的问题?