【问题标题】:How to count substring of a string has appeared in another large string?如何计算一个字符串的子字符串已经出现在另一个大字符串中?
【发布时间】:2014-02-27 14:08:24
【问题描述】:

我有一个像“ali li vali bali”这样的大字符串,我想知道所有单词(我的意思是像 li 这样的单个单词)重复了多少次(ali、li、vali 和 bali 仅被视为子字符串) 除了它自己的存在。

例如:li 是一个大字符串中的子字符串,它重复三次而不是它自己的存在。

li in ali, li in vali 和 li in bali。计数是:3。

这是我的代码和我得到的错误:

import java.util.*;
public class main{
    public static void main(String args[]){
        String str="";
        Scanner scan= new Scanner(System.in);
        while(scan.hasNext())
        {
            str+= scan.nextLine();
        } 
        int n= str.trim().split("\\s+").length;
        String[] wordsArray=str.split(" ");
        substring sub=new substring();
        for(int i=0;i<wordsArray.length;i++){
            int count=sub.sub(wordsArray[i],str);
            csub+=count;
        }
        System.out.println("number of substring: "+csub);

和子串做:

public class substring{
    public int sub(String str,String str2){
        String[] wordsArray=str2.split(" ");
        int len=str.length();
        int b=0;
        String[] str1=new String[len*2+2];
        int k=0;
        for (int from = 0; from < str.length(); from++) {
            for (int to = from + 1; to <= str.length(); to++) {
                str1[k]=str.substring(from, to);
                k++;
            }
        }
        int index = 0;
        int count = 0;
        for(int i=0;i<str1.length;i++){
            if(str1[i].length()>2){
                while ((index = str2.indexOf(str1[i], index)) != -1) {
                    index += str1[i].length();
                    count++;
                    b++;
                }
            }
        }
        return b;
    }
}

怎么了?

**I got this error:**                 
Expection in thread "main" java lang.NullPointerExpection                    
at substring.sub<substring.java:20>                                   
at main.main<main.java:52>

【问题讨论】:

  • 第20行是哪一行?
  • 天哪,你的代码人缩进。并将您的班级名称大写。
  • 在子字符串中:count++;
  • 发布到 SO 时缩进有时会丢失。 OP 并不总是不缩进他的代码....
  • 天哪:str+= scan.nextLine();。那个可怜的字符串。

标签: java string substring


【解决方案1】:

你可以只扫描字符串而不拆分它。

例子:

public static int countSubstring(String str, String substring) {
    // start at the beggining of the string
    int pos = 0; 
    int count = 0;

    // search starting at pos and store the index (if found) on pos
    while ((pos = str.indexOf(substring, pos)) != -1) {
        count++;

        // pos is at the index of last found substring
        // advance it by the length of the substring
        pos = pos + substring.length();
    }
    return count;
}

public static void main(String[] args) {
    System.out.println(countSubstring("li, vali and bali", "li"));
}

输出

3

【讨论】:

    【解决方案2】:

    你可以这样做,

    public static int sub(String str, String str2) {
        if (str == null || str2 == null) {
            return 0;
        }
        int count = 0;
        int p = str2.indexOf(str);
        while (p >= 0) {
            count++;
            p = str2.indexOf(str, p + str.length());
        }
        return count;
    }
    
    public static void main(String[] args) throws Exception {
        String toSearch = "Hi Dee Hi";
        System.out.println(sub("Hi", toSearch));
        System.out.println(sub("Dee", toSearch));
        System.out.println(sub("Ho", toSearch));
    }
    

    输出

    2
    1
    0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      • 2014-11-14
      • 2011-07-13
      • 2017-02-01
      • 1970-01-01
      • 2014-05-26
      • 2016-07-27
      相关资源
      最近更新 更多