Java字符串参数第一个/最后一个参数
我正在学习,无法找到以下任务的解决方案: 这就是任务: 编写一个函数,获取作为字符串参数传递的任务。我们只限于在文本中搜索。每个任务的结构如下:Java字符串参数第一个/最后一个参数,java,string,char,Java,String,Char,我正在学习,无法找到以下任务的解决方案: 这就是任务: 编写一个函数,获取作为字符串参数传递的任务。我们只限于在文本中搜索。每个任务的结构如下: <TASK> <WHAT> <TEXT> 暗示 如果按Run,您将看到所有System.out.println的控制台输出 private static final Pattern=Pattern.compile(“FIND\\s+(?FIRST | LAST)\\s+(?CHAR | WORD)\\s+(?\
<TASK> <WHAT> <TEXT>
暗示
- 如果按Run,您将看到所有System.out.println的控制台输出
private static final Pattern=Pattern.compile(“FIND\\s+(?FIRST | LAST)\\s+(?CHAR | WORD)\\s+(?\\s+)\\s+(?。+)”;
公共静态整型查找(字符串str){
Matcher-Matcher=PATTERN.Matcher(str);
如果(!matcher.matches())
返回-1;
字符串pos=matcher.group(“pos”);
字符串单位=matcher.group(“单位”);
String what=matcher.group(“what”);
String text=matcher.group(“text”);
布尔值first=“first”。等于(pos);
如果(“字符”。等于(单位))
首先返回?text.indexOf(what):text.lastIndexOf(what);
如果(“字”。等于(单位)){
Matcher match=Pattern.compile(“\\b”+what+“\\b”).Matcher(文本);
int offs=-1;
while(match.find()){
offs=match.start();
如果(第一)
打破
}
退货;
}
返回-1;
}
为什么第二个示例输出-1?那里有一个a
。为什么第一个示例输出0?那里没有D
。到目前为止你试了什么?
<TASK> = "FIND (FIRST | LAST) (CHAR | WORD)"
"FIND FIRST CHAR D This is a text" → Output: "0"
"FIND FIRST CHAR a This is a text" → Output: "-1"
"FIND FIRST CHAR s This is a text" → Output: "3"
"FIND LAST CHAR t This is a text" → Output: "16"
"FIND FIRST WORD is This is a text" → Edition: "5"
"FIND LAST WORD is This is a text" → Output: "5"
private static final Pattern PATTERN = Pattern.compile("FIND\\s+(?<pos>FIRST|LAST)\\s+(?<unit>CHAR|WORD)\\s+(?<what>\\S+)\\s+(?<text>.+)");
public static int find(String str) {
Matcher matcher = PATTERN.matcher(str);
if (!matcher.matches())
return -1;
String pos = matcher.group("pos");
String unit = matcher.group("unit");
String what = matcher.group("what");
String text = matcher.group("text");
boolean first = "FIRST".equals(pos);
if ("CHAR".equals(unit))
return first ? text.indexOf(what) : text.lastIndexOf(what);
if ("WORD".equals(unit)) {
Matcher match = Pattern.compile("\\b" + what + "\\b").matcher(text);
int offs = -1;
while (match.find()) {
offs = match.start();
if (first)
break;
}
return offs;
}
return -1;
}