我一直在实现一个应用程序来检索传入的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的模块,但如果从某些情况下它如何带有像第一个样本的白色空间或者在第二个样本中带有“/”(斜杠) 。我知道我可以制作一个“if”语句并在它是空格时剪切它或者它是斜线但是我想知道是否还有另一种方式可以更有活力。
提前感谢您的时间和帮助。最好的问候。
答案 0 :(得分:1)
我不确定这是最好的解决方案,但你可以试试这个:
String[] tmp = yourString.Split("\\.|/| ");
for (int i=0; i< tmp.length(); i++) {
if (tmp[i].matches("^Module.*")) {
return tmp[i];
}
}
return null;
答案 1 :(得分:1)
您可以像这样使用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));
}
}
基于第一个非字母字符是单词的结束标记的假设。
答案 2 :(得分: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));
}