Java 减少大写或小写之前的重复单词

Java 减少大写或小写之前的重复单词,java,Java,主要 阶级 我正在努力消除重复的字母,例如Hello将是Hello。我已经做到了,但是,我想要实现的是,不管它是大写还是小写,它仍然会被归类为一个副本,所以呵呵就是他,而不是呵呵。我应该。平等。。。每封信或每封信都有一个有效的方法吗?很抱歉问你们这是不是一个简单的问题 您可以使用大写和小写字符进行两次检查: public class Dupe {

主要

阶级


我正在努力消除重复的字母,例如Hello将是Hello。我已经做到了,但是,我想要实现的是,不管它是大写还是小写,它仍然会被归类为一个副本,所以呵呵就是他,而不是呵呵。我应该。平等。。。每封信或每封信都有一个有效的方法吗?很抱歉问你们这是不是一个简单的问题

您可以使用大写和小写字符进行两次检查:

public class Dupe                                       
{                                       
  public static String Eliminate(String input)                                      
  {                                     
    char[] chrArray = input.toCharArray();                                      
    String letter ="";                                      

    for (char value:chrArray){                                      
      if (letter.indexOf(value) == -1){                                     
        letter += value;                                        
      }                                     
    }                                       
    return letter;                                      
  }                                     
}    

这将替换所有重复字符,无论序列中有多少个重复字符

public static String Eliminate(String input)                                      
{                                     
char[] chrArray = input.toCharArray();                                      
String letter ="";                                      

for (char value:chrArray){                                      
  if (letter.indexOf(value.toLowerCase()) == -1 && letter.indexOf(value.toUpperCase()) == -1){                                     
    letter += value;                                        
  }                                     
}                                       
return letter;                                      
} 

如果您正在寻找重复项,如:abacd以替换两个a,请按照Pattern.compile.[0-9A-Za-z]\\1+.

中给出的正则表达式尝试此操作。这可能不是最有效的方法,但您可以尝试一下

public static void main(String[] args)
{
    String duped = "aaabbccddeeffgg";
    final Pattern p = Pattern.compile("(\\w)\\1+");
    final Matcher m = p.matcher(duped);
    while (m.find())
        System.out.println("Duplicate character " + (duped = duped.replaceAll(m.group(), m.group(1))));
}

下面是另一种有状态的方法:-

  public class Main                                       
  {                                       
     public static void main(String[] args)                                        
     {                                     
        System.out.println(Dupe.Eliminate("Testing UppeR and loweR"));                                                                                                                                                                           

     }                                     
  }

  class Dupe                                       
  {                                       
     public static String Eliminate(String input)                                      
     {                                     
       char[] chrArray = input.toCharArray();                                      
       String letter ="";                                
       for(int index = 0; index < chrArray.length; index++)
       {
           int j = 0;
           boolean flag = true;
          //this while loop is used to check if the next character is already existed in the string (ignoring the uppercase or lowercase)
           while(j < letter.length())
           {
               if((int)chrArray[index] == letter.charAt(j) || (int)chrArray[index] == ((int)letter.charAt(j)+32) ) //32 is because the difference between the ascii value of the uppercase and lowercase letter is 32
               {
                   flag = false;
                   break;
               }
               else
                   j++;
           }

          if(flag == true)
          {
            letter += chrArray[index];
          }
      }

      return letter;                                      
    }                                     
  }    

输出:他

难道他不应该成为他吗?哦,是的,对不起,你想删除每个单词中的重复字母,还是整个句子中的重复字母?i、 对于Foo-dumble,你想要Foo-lish还是Fo-folish?如果不是很有效,最简单的方法是:if-letter.toLowerCase.indexOfCharacter.toLowerCasevalue=-1
  public class Main                                       
  {                                       
     public static void main(String[] args)                                        
     {                                     
        System.out.println(Dupe.Eliminate("Testing UppeR and loweR"));                                                                                                                                                                           

     }                                     
  }

  class Dupe                                       
  {                                       
     public static String Eliminate(String input)                                      
     {                                     
       char[] chrArray = input.toCharArray();                                      
       String letter ="";                                
       for(int index = 0; index < chrArray.length; index++)
       {
           int j = 0;
           boolean flag = true;
          //this while loop is used to check if the next character is already existed in the string (ignoring the uppercase or lowercase)
           while(j < letter.length())
           {
               if((int)chrArray[index] == letter.charAt(j) || (int)chrArray[index] == ((int)letter.charAt(j)+32) ) //32 is because the difference between the ascii value of the uppercase and lowercase letter is 32
               {
                   flag = false;
                   break;
               }
               else
                   j++;
           }

          if(flag == true)
          {
            letter += chrArray[index];
          }
      }

      return letter;                                      
    }                                     
  }    
String s = "Hehe";
Set<String> found = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
String result = s.chars()
        .mapToObj(c -> "" + (char) c)
        .filter(found::add)
        .collect(Collectors.joining());
System.out.println(result);