我一直在实现一个应用程序来检索传入String参数中的单词,这个String参数可以变化,因为它是一个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"语句,当它是空格或斜杠时就把它截断,但我想知道是否有另一种更动态的方法。
提前感谢您的时间和帮助。致以最亲切的问候。
我不确定这是最好的解决方案,但你可以试试这个:
String[] tmp = yourString.Split("\.|/| ");
for (int i=0; i< tmp.length(); i++) {
if (tmp[i].matches("^Module.*")) {
return tmp[i];
}
}
return null;
可以这样使用String.indexOf
和String.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));
}
}
基于假设第一个非字母字符是单词的结束标记。
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));
}