【问题标题】:Only last common character is getting deleted from string not all the common character只有最后一个常见字符从字符串中删除,而不是所有常见字符
【发布时间】:2015-09-19 12:37:29
【问题描述】:

我正在尝试从字符串中删除重复的常用字符,但问题只是最后一个常用字符,在这种情况下是 y 被删除,所有其他常用字符都按原样显示。我没有任何异常。

public class stringCompare {
private static String s;
private static char[] c;
private static boolean[] b;

public static void judge(boolean flag , int l){
    b[l] = flag;
}//judge

public static void main(String[] args) {

    s = "unlucky unlucky unlucky unlucky";
    c = new char[s.length()];
    b = new boolean[s.length()];
    int j;
    System.out.println(s.length());
    for(int i=0 ; i<s.length() ; i++){
        c[i] = s.charAt(i);
        System.out.println(c[i]);
         for(j=0 ; j<s.length() ; j++){
             System.out.println(c[j]);
             if(c[i] == s.charAt(j)){
                 judge(true , i);
             }//if
             else if(c[i] != s.charAt(j)){
                 judge(false , i);
             }//else if
         }//for
    }//for

    StringBuilder sb = new StringBuilder(s.length());
    for(int k=0 ; k<b.length ; k++){
        System.out.println(b[k] +"===="+k);
        if(b[k] == false){
            sb.append(c[k]);
        }//if
    }//for

    System.out.println(sb.toString());

 }//main

}//stringCompare

Output from the program -
 unluck unluck unluck unluck

但我期待输出 - 不幸

【问题讨论】:

  • 什么是“重复通用字符”?
  • @Thorbjørn Ravn Andersen unlucky 重复出现,但我们可以看到字符串集合中有五个 unlucky。我想既然整个字符串都在重复,所以只会显示第一个字符串,而其他所有字符串都会被删除。
  • 应该是delete repeating word
  • 那么你想检测字符串中已经出现的子字符串并在复制时跳过它们?
  • @Thorbjørn Ravn Andersen 是的,先生,但我不允许在这里使用任何通用方法

标签: java arrays string character


【解决方案1】:

试试这个逻辑

StringBuilder sb=new StringBuilder();
String s = "unlucky unlucky unlucky unlucky";
char[] inp_cpy=s.toCharArray();
for( char x : inp_cpy)
{
   if(!sb.ToString().Contains(""+x))
   {
   sb.append(x);
   }
}
System.out.println(sb.toString());

【讨论】:

  • “abc cba”会打印什么?
【解决方案2】:

此代码打印“unlcky”,即删除所有重复字符。我明白那是你的问题。如果不允许使用“indexOf”,则应将其替换为在字符串中搜索字符的循环。

public class stringCompare {
    private static String s;

    public static void main(String[] args) {

        s = "unlucky unlucky unlucky unlucky";

        StringBuilder result = new StringBuilder();

        for (int i = 0; i < s.length(); i++) {
            String currentChar = s.substring(i,i+1);
            if (result.indexOf(currentChar)==-1) {
                result.append(currentChar);
            }
        }
        System.out.println(result.toString());
    }
}

【讨论】:

    【解决方案3】:

    如果排序是一个问题,您可以使用 LinkedHashSet,否则使用 TreeSet 或 HashSet。

    import java.util.Arrays;
    import java.util.LinkedHashSet;
    
    public class StringCompare{
    public static void main(String[] args) {
    
    String s = "unlucky unlucky unlucky unlucky";
    LinkedHashSet<Character> linkedhashset = new LinkedHashSet<Character>();
    for (int i = 0; i < s.length(); i++) {
         if(s.charAt(i) != ' ')
         linkedhashset.add(s.charAt(i));
         }
    System.out.println(Arrays.toString(linkedhashset.toArray()));
    linkedhashset.forEach(System.out::print);
    }
    }
    

    输出是:

    [u, n, l, c, k, y] 
    unlcky

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 2012-12-08
      • 2023-04-04
      • 2020-03-20
      相关资源
      最近更新 更多