计算字符串中的特定字符

时间:2014-01-11 20:25:43

标签: java string search

我是编码的新手。如果有人可以帮助我:在此代码中寻找解决方案,如何计算在随机生成的字符串中可以找到“END”的次数。

谢谢你们!

public class Tombos {

  public static void main (String[] args) throws FileNotFoundException {

    PrintStream out1 = System.out;
    PrintStream out2 = new PrintStream(new File("out.txt"));

    String betuk = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";  
    int i;
    for (i=0; i<1000; i++) {  
      char random = betuk.charAt((int)(26*Math.random()));      
      out2.print(random);
    }
    Scanner beolvas = new Scanner(new File("out.txt"));
    String x = beolvas.next();
    if (x.contains("END")) {
      out1.print( "tartalmaz");    // include "END"
    } else {
      out1.print( "nem tartlmaz");  // not include "END"
    }
  }
}

6 个答案:

答案 0 :(得分:3)

您可以使用countMatches类的StringUtils方法。

int count = StringUtils.countMatches(x, "END");

它计算String在另一个字符串中出现的次数。 See documentation

答案 1 :(得分:2)

如果您是Apache Commons库的用户,StringUtils#countMatches将完成这项工作。

int count = StringUtils.countMatches(x, "END");

如果没有,我可能会使用String#split

int count = x.split("END").length - 1;

它有点难看,但它很容易,而且它是单行的:)

答案 2 :(得分:0)

只需创建一个新的int变量,如int count = 0;然后

 if (x.contains("END)) {
count++;
}

每当你找到一个“END”增加你的变量,之后只需打印你的变量。

答案 3 :(得分:0)

这就是我要做的事情:

首先,创建一个新的int变量。我们称之为countint count;

然后,在for循环的主体中,每次找到匹配的字符串时都会向count添加一个字符串,如下所示:count = count + 1

程序看起来应该是这样的:

int i;
int count;

for (i=0;i<1000;i++) {  
    char random=betuk.charAt((int)(26*Math.random()));      
    out2.print(random);
}

Scanner beolvas=new Scanner(new File("out.txt"));
String x=beolvas.next();

if (x.contains("END")) {
    out1.print( "tartalmaz");    // include "END"
    count = count + 1;           // add one to the count of matches
} else {
    out1.print( "nem tartlmaz");  // not include "END"
}

答案 4 :(得分:0)

我不确定你对随机字符串和文件扫描程序的确切意图是什么,但是你所询问的字符串计数的基本方法是使用正则表达式(Pattern class):

int endCount = 0;
Matcher matcher = Pattern.compile("END").matcher(x);
while (matcher.find()) {
    endCount++;
}

请注意,如果您在循环中的某个位置执行此操作或反复调用该方法,那么最终会使Pattern.compile()调用发生在仅调用一次的某个位置,从而产生更高效率存储Pattern以供重复使用。

答案 5 :(得分:0)

这是一种算法方法:

String x = "ENDDOFJUESADNFENDEJFDNFDENDD"; // arbitrary String

boolean moreMatches = true;
int index = 0, count = 0;

while(moreMatches) {

    if (x.indexOf("END", index) > -1)
    {
        index = x.indexOf("END", index) + 1;
        count++;
    } else {
        moreMatches = false;
    }
}

System.out.print(count); // prints 3

请阅读String.indexOf(String s, int fromIndex)的文档,了解我所做的事情。

每当我在字符串中找到单词"END"时,我再次搜索,但这次从之后的位置搜索"END",我上次发现它。当我再也找不到它时,我就完成了循环。