2017-10-20 51 views
-1

Je ne suis pas sûr du code pour cela, mais si l'on à l'entrée « oooooooooo » après une demande (comme dans un comme « un » ou quelque chose si-déclaration ou quelque chose où le programme enregistre « o »), comment pourrait- vous faites "oooooooooo" traduire en "o"?Comment faire de multiples entrées d'un seul registre de caractères comme un personnage?

Faudrait-il d'écrire manuellement différentes itérations de "o" (comme, "oo" et "ooo" et "oooo" ... etc.). Serait-il semblable à quelque chose comme la méthode des cas ignorés où O et o deviennent les mêmes? Donc "ooo ..." et "o" se terminent par la même chaîne.

+1

Je pense que vous « cherchez [' chaîne # replaceAll() '] (http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#replaceAll-java.lang.String-java. lang.String-). Si vous n'êtes pas familier avec les expressions régulières, [Learning Regular Expressions] (https://stackoverflow.com/questions/4736/learning-regular-expressions) est un bon point de départ. – azurefrog

+1

Vous pouvez utiliser une regex et faire correspondre 'o +', signifiant «o» répété 1 fois ou plus – Blorgbeard

+0

Où est votre tentative? –

Répondre

0

utilisant l'expression rationnelle:

public static String getSingleCharacter(String input){ 
     if(input == null || input.length() == 0) return null; 
     if(input.length() == 1) return input; 
     if(!input.toLowerCase().matches("^\\w*?(\\w)(?!\\1|$)\\w*$")){ 
      return Character.toString(input.toLowerCase().charAt(0)); 
     } 
     return null; 
} 

si la méthode retourne null alors les caractères ne sont pas tous les mêmes, sinon il retournera que seul omble chevalier représenté sous forme de chaîne.

0

Bien que overkill probablement celui des cas d'utilisation, il serait utile d'apprendre à utiliser des expressions rationnelles à l'avenir. Java fournit une bibliothèque regex à utiliser appelée Pattern. Par exemple, l'expression régulière/o + ne/correspondraient une chaîne « o ... ne » avec au moins un « o ».

-1
public string condense(String input) { 
    if(input.length >= 3) { 
     for(int i=0; i< input.length-2; i++){ 
      if(input.substring(i,i+1) != input.substring(i+1,i+2)){ 
       return input; 
      } 
     } 
    } 
    return input.substring(0,1); 
} 

Ce vérifie si la chaîne est de 3 caractères ou plus, et s'il boucle dans la chaîne entière. Si chaque caractère de la chaîne est le même, il renvoie une version condensée de la chaîne.

0

Utiliser l'expression régulière /(.)\1+/ et String#replaceAll() pour correspondre à court de deux ou plusieurs du même caractère, puis remplacer le match avec la valeur du premier groupe de correspondance identifié avec $1 comme suit:

public static String squeeze(String input) { 
    return input.replaceAll("(.)\\1+", "$1"); 
} 

String result = squeeze("aaaaa bbbbbbb cc d"); 

assert(result.equals("a b c d"));