我遇到了从字符串中创建子字符串的问题。 我想从我的字符串中找到所有子串beetwen标记“F2 *”和“K”。
String str = "F2* *KF2*AT+BCAST:07,Max2*KF2*AT+JN*K";
Matcher m = Pattern.compile(
Pattern.quote("F2*")
+ "(.*?)"
+ Pattern.quote("*K")
).matcher(str);
while(m.find()){
String match = m.group(1);
Toast.makeText(this, "Contains frame: " +match , Toast.LENGTH_LONG).show();
}
我的期望是: “”,“AT + BCAST:07,Max2”,“AT + JN”
它不起作用。 如果它可以工作,下一步是从字符串中删除所有帧“F2 * .... * K”。 我想这样做:
str.replaceFirst(temp1, "");
其中temp1 contanis F2 * +匹配+ * K
这是对的吗?
提前致谢,
@MelihAltıntaş,谢谢你的回答。
它在我的Android应用程序中不起作用。 Matcher.find()总是假的,没有成功匹配的java报告。
import java.util.regex.Matcher; import java.util.regex.Pattern;
MainString = "F2* *KF2*AT+BCAST:07,Max2*KF2*AT+JN*K";
Toast.makeText(this, MainString , Toast.LENGTH_LONG).show();
try{
if( (MainString.contains("F2*"))&&(MainString.contains("*K")) )
{
Pattern pattern = Pattern.compile("(?<=F2\\*).*?(?=\\*K)");
Matcher matcher = pattern.matcher(MainString);
Toast.makeText(this, "contains frame" + matcher.group(1), Toast.LENGTH_LONG).show(); // this only for cheking error - > java reports no successful match
while (matcher.find()) {
Toast.makeText(this, "zawiera ramke: " , Toast.LENGTH_LONG).show();
System.out.println(matcher.group());
}
}
}catch(Exception e){
Toast.makeText(this, e.toString() , Toast.LENGTH_LONG).show();
}
答案 0 :(得分:0)
也许您可以使用java.lang.String#indexOf(String str, int fromIndex)
搜索框架,然后从找到&#34; K&#34;的位置开始。
答案 1 :(得分:0)
在F2 *和* k ==&gt;
之间找到 String str = "F2* *KF2*AT+BCAST:07,Max2*KF2*AT+JN*K";
Pattern pattern = Pattern.compile("(?<=F2\\*).*?(?=\\*K)");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group());
}
输出:
1
2 AT+BCAST:07,Max2
3 AT+JN
如果您只想从字符串中删除==&gt;
str = str.replaceAll("(?<=F2\\*).*?(?=\\*K)", "");
System.out.println(str);
输出:
F2**KF2**KF2**K
答案 2 :(得分:0)
如果F2 *和* K始终是您要查找的术语,则无需使用正则表达式,如果这对您不起作用。您可以使用indexof执行此操作,您只需重复此过程即可。我认为START_KEY始终位于END_KEY之前,并且这些不会被您要在此过程中提取的普通文本重复。
private static final String START_KEY = "F2*";
private static final String END_KEY = "*K";
List<String> substrings = new ArrayList<String>();
private void processString(String s){
if(s.indexof(START_KEY) == -1){
return;
}
//Offset target string by number of char in START_KEY
substrings.add(s.substr(s.indexof(START_KEY) + 3, s.indexOf(END_KEY)));
//Recursive call on left over char if any exist
try{
processString(s.substr(endKey + 2);
} catch (IndexOutOfBoundsException e) {
//ignore - if no string left call should end
}
}