2016-09-28 63 views
-1

我尝试运行这个测试开始:线移动到一个字符串

@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) 

如何解决我的匹配?

+0

你可以检查matcher.matches()而不是matcher.find()吗? – Techidiot

+1

你的'Pattern'期待匹配整行。用'。*'包围它或者适当地设置你的选项。 https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html –

+0

当我测试代码时,它工作正常(虽然它缺少'newString'中的空间)。 – resueman

回答

0

你的代码很好,除了太多了。试试这个:

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

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

+0

顺便说一句,你会如何解决我的正则表达式? –

+0

@elad如果你的意思是空间的东西,那么就像我做的那样:在组中的数字后面捕获一个空格。顺便说一句,你的方法不需要任何括号 - 只需使用'group(0)'或只是'group()' – Bohemian

+0

谢谢,请参阅我的更新 - 我该如何解决这个多行字符串? –

相关问题