1

我一直在实现一个应用程序来检索传入字符串参数中的单词,这个字符串参数可以变化,因为它是一个 URL,但几乎所有传入 url 的模式都是相同的。例如我可以有:

GET /com.myapplication.v4.ws.monitoring.ModuleSystemMonitor HTTP/1.1

或者

GET /com.myapplication.filesystem.ws.ModuleFileSystem/getIdFolders/jsonp?idFolder=idFis1&callback=__gwt_jsonp__.P0.onSuccess&failureCallback=__gwt_jsonp__.P0.onFailure HTTP/1.1

所以无论如何,我想提取以Module开头的单词,例如,对于我要获取的第一个传入参数:ModuleSystemMonitor。对于第二个,我想知道这个词:ModuleFileSystem。

这是要求,除此之外我不能做任何其他事情:只是一个接收一行并尝试提取我提到的单词的方法:ModuleSystemMonitor 和 ModuleFileSystem。

我一直在考虑使用StringTokenizer类或String#split方法,但我不确定它们是否是最佳选择。我试过了,使用 indexOf 很容易得到以 Module 开头的单词,但是如果在某些情况下它带有一个像第一个示例一样的空格或者它带有一个“/”(斜杠)在第二个示例中,如何剪切这个单词. 我知道我可以做一个“if”语句并在它是空白或斜线时将其剪切,但我想知道是否还有另一种可能更具动态性的方法。

提前感谢您的时间和帮助。此致。

4

3 回答 3

1

我不确定这是最好的解决方案,但你可以试试这个:

String[] tmp = yourString.Split("\\.|/| ");
for (int i=0; i< tmp.length(); i++) {
    if (tmp[i].matches("^Module.*")) {
       return tmp[i];
    }
}
return null;
于 2013-05-02T14:29:16.377 回答
1

你可以像这样使用String.indexOfString.substring

int startIndex = url.indexOf("Module");    

for (int index = startIndex + "Module".length; i < url.length; i++
{
  if (!Character.isLetter(url.charAt(index)) 
  {
    return url.substring(startIndex, index));
  }
}

基于第一个非字母字符是单词的结束标记的假设。

于 2013-05-02T14:33:59.863 回答
0
String stringToSearch = "GET /com.myapplication.v4.ws.monitoring.ModuleSystemMonitor    HTTP/1.1";
Pattern pattern = Pattern.compile("(Module[a-zA-Z]*)");
Matcher matcher = pattern.matcher(stringToSearch);
if (matcher.find()){
        System.out.println(matcher.group(1));
}
于 2013-05-02T14:41:21.877 回答