给定字符串

时间:2015-05-15 16:41:30

标签: java string compiler-errors stringbuffer

我试图找到字符串的所有可能的不同子串。这是我目前的代码:

import java.util.Scanner;

public class Solution {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();

        StringBuffer f = new StringBuffer();

        //Get a string of possible substrings with out uniqueness
        for (int i = 0; i < str.length(); i++) {
            for (int j = i; j < str.length(); j++) {
                f.append(str.charAt(j) + ",");
            }
        }

        f.deleteCharAt(sb.length() - 1);
        String s = f.toString();
        String[] arr = s.Split(',');
        arr = arr.Distinct().ToArray();

        for (int i = 0; i < arr.length; i++)
            System.out.println(arr[i]);
    }
}

编译时收到多个错误。我不明白代码出错的地方。我是否忘记导入课程或语法错误?

Solution.java:28: error: cannot find symbol
f.deleteCharAt(sb.length()-1);
               ^
symbol:   variable sb
location: class Solution
Solution.java:31: error: cannot find symbol
String[] arr = s.Split(',');  
                ^
symbol:   method Split(char)
location: variable s of type String
Solution.java:34: error: cannot find symbol
arr = arr.Distinct().ToArray();  
         ^
symbol:   method Distinct()
location: variable arr of type String[]
3 errors

2 个答案:

答案 0 :(得分:1)

很难理解你打算做什么,但当你说出给定字符串的不同子串时,我不认为你的意思是独特的字母。所以看看这个...

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String str = sc.nextLine();

    for (int i = 0; i < str.length(); i++) {
        for (int j = i + 1; j < str.length() + 1; j++) {
            String substring = str.substring(i, j);

            if (str.indexOf(substring, i + substring.length()) == -1) {
                System.out.println("Unique Substring: " + substring);
            }
        }
    }
}

我用#34;你好&#34;测试了这个,给出你对最后一个答案的评论。你会注意到第一个&#34; l&#34; (小写字母L)不是结果的一部分,因为下一个&#34; l&#34; (小写L),但第二个&#34; l&#34; (小写L)是一个唯一的子串。

enter image description here

这是你正在寻找的吗?

答案 1 :(得分:-1)

以下是获取唯一或不同值的有效方法。 HashSet不允许重复,因此您可以先准备一个具有重复值的ArrayList,并将其传递给HashSet的构造函数,并将所有重复删除。

String[] str = {"A", "B", "A", "C", "D", "B"};
List<String> arrayList = Arrays.asList(str);;
System.out.println(arrayList);
HashSet<String> hashSet = new HashSet<String>(arrayList);
System.out.println(hashSet);