我必须字符串对象:
String first = "/Some object that has a loop in it object/";
String second = "object";
我需要做的是找出第二个对象在第一个对象中重复了多少次,你能告诉我怎么做吗?
使用在后台使用正则表达式的这一行:
String[] parts = first.split(second);
String在 String 中second
出现(parts.length - 1)次first
。就这样。
编辑:
为防止在 Stringsecond
可能包含正则表达式特定字符的情况下可能出现不需要的结果,您可以Pattern.quote(second)
在将其传递给split()
方法时使用,正如其中一位评论员所建议的那样。
最简单的方法是indexOf
在循环中使用,每次找到单词时都会推进起始索引:
int ind = 0;
int cnt = 0;
while (true) {
int pos = first.indexOf(second, ind);
if (pos < 0) break;
cnt++;
ind = pos + 1; // Advance by second.length() to avoid self repetitions
}
System.out.println(cnt);
如果一个单词包含自我重复,这将多次找到该单词。请参阅上面的评论以避免此类“重复”发现。
使用regex
,例如:
import java.util.regex.*;
class Test {
public static void main(String[] args) {
String hello = "HelloxxxHelloxxxHello"; //String you want to 'examine'
Pattern pattern = Pattern.compile("Hello"); //Pattern string you want to be matched
Matcher matcher = pattern.matcher(hello);
int count = 0;
while (matcher.find())
count++; //count any matched pattern
System.out.println(count); // prints how many pattern matched
}
}
用这个 :
String first = "/Some object that has a loop in it object/";
String second = "object";
Pattern pattern = Pattern.compile(second);
Matcher matcher = pattern.matcher(first) ;
long count = 0;
while(matcher.find()) {
count ++;
}
System.out.println(count);
尝试如下...
String str = "/Some object that has a loop in it object/";
String findStr = "object";
int lastIndex = 0;
int count =0;
while(lastIndex != -1){
lastIndex = str.indexOf(findStr,lastIndex);
if( lastIndex != -1){
count ++;
lastIndex+=findStr.length();
}
}
System.out.println(count);
您可以拆分String
第二个String
并计算结果数组的长度,它将多一个元素,即出现次数。或者您可以使用Pattern
and Matcher
,这是一种更合适的方法。
public static void main(String[] args) throws UnsupportedEncodingException, IOException {
String first = "/Some object that has a loop in it object/";
String second = "object";
System.out.println(first.split(Pattern.quote(second)).length - 1);
final Pattern pattern = Pattern.compile(Pattern.quote(second));
final Matcher matcher = pattern.matcher(first);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println(count);
}
不要忘记使用Pattern.quote
以防万一。
我知道这是一个较老的话题,但在我脑海中,你可以使用递归:
// Recursive routine to find the xth repeat of a string
public int atIndex(String searchin, String searchfor, int whichone, int pos) {
return atIndex(searchin, searchfor, whichone, pos, 0);
}
public int atIndex(String searchin, String searchfor, int whichone, int pos, int recursed) {
return (whichone>0?atIndex(searchin, searchfor, --whichone, searchin.indexOf(searchfor,pos)+1,++recursed):(recursed==0?-1:pos-1));
}
我是 Java 新手,所以可能存在我不知道的速度或资源问题,但一点点测试应该可以解决任何问题。
要调用它,您可以使用:
String HL7Test="MSH|^~\\&|EPIC|EPICADT|SMS|SMSADT|199912271408|CHARRIS|ADT^A04|1817457" ;
System.out.println(atIndex(HL7Test, "|", 4, 0));
希望这可以帮助。
在这里,您只需要两个变量并在循环条件中进行所有检查。
int pos = 0;
int count= 0;
while (first.indexOf(second, pos) >= 0) {
count++;
pos = first.indexOf(second, pos) + 1;
}
System.out.println(count);