如何从字符串中获取所有子字符串。JAVA
我在从字符串获取子字符串时遇到问题。 我想从我的字符串中找到所有的子字符串F2*和K如何从字符串中获取所有子字符串。JAVA,java,android,Java,Android,我在从字符串获取子字符串时遇到问题。 我想从我的字符串中找到所有的子字符串F2*和K String str = "F2* *KF2*AT+BCAST:07,Max2*KF2*AT+JN*K"; Matcher m = Pattern.compile( Pattern.quote("F2*") + "(.*?)"
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
这是正确的吗
提前感谢,
@梅利赫·阿尔塔,谢谢你的回答
它在我的android应用程序中不起作用。find始终为false,如果没有它,java报告将不会成功匹配 导入java.util.regex.Matcher; 导入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();
}
也许您可以使用java.lang.StringindexOfString str,int fromIndex搜索帧,然后从找到K的位置开始搜索。要在F2*和*K==>
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());
}
如果只想从字符串中删除==>
str = str.replaceAll("(?<=F2\\*).*?(?=\\*K)", "");
System.out.println(str);
如果F2*和*K始终是您要查找的术语,那么如果不适合您,则无需使用正则表达式。您可以使用indexof来完成此操作,只需重复此过程。我假设开始键总是在结束键之前,并且在这个过程中要提取的普通文本不会复制这些键
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
}
}
尝试使用group2,我不认为regex是0 basedIt在我的android应用程序中不起作用。find总是false,如果没有它,java报告将不会成功匹配。只有当字符串中只有一个K时,这才有效。如果有2K的索引,这不是一个好主意。为什么?通过indexOfF2,0和indexOfK,0搜索第一帧,然后在后续搜索中,将0替换为找到的最后一个K的位置-以便每个新搜索在找到最后一个K后开始。仅搜索K不处理起始标记。就这样结束了。如果您同时查找这两个,并在切掉找到的字符串后继续查找,则索引会起作用。这根本不是真的,您可以为indexOf提供一个开始索引,以便搜索应该在哪个位置开始,这样您就不必切掉字符串。我明白您的意思。你找K,把前面的代入到F2*的末尾,然后从K的末尾继续。我不知道你可以在一个特定的点后进行索引。好的,我不知道。这是我在stackoverflow的第一个等式。
F2**KF2**KF2**K
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
}
}