Je travaille sur le java String Jetkens em > sur Hackerrank. Mon code est comme suit:
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
// Write your code here.
scan.close();
// if length is 0
if (s.length() == 0 || s == null) {
System.out.println(0);
return;
}
// It seems we need to remove some spaces
s = s.trim();
String[] words = s.split("[ |!|,|\\?|\\.|_|'|@|]+");
System.out.println(words.length);
for (String word: words){
System.out.println(word);
}
}
}
3 Réponses :
regex Ne séparez pas les caractères dans un Il n'est pas nécessaire d'échapper au corrigé regex serait Le principal problème avec le code dans la question est que Exemple 1: em> entrée Exemple 2: em> Entrée Exemple 3: em> Entrée Dans les exemples 1 et 2, que la chaîne vide menant devrait être ignorée. P>
Je laisserai la fixation réelle du code, car ce est em> votre défi à résoudre. p> "[|! |, | \\? | \\. | _ | _ | '| @ |] +" code> est étranger. P>
[] code> Classe de caractères par le | code> ou modèle , puisque ce motif ne s'applique qu'en dehors d'une classe de caractères. P>
li>
? code> et . code> dans une classe de caractères, car ils ne sont pas des caractères spéciaux là-bas. P>
li>
ul>
[!,? ._ '@] + code> ou [^ a-za-z] + p>. p>.
divisé () code> peut renvoyer un tableau dans lequel le premier élément est une chaîne vide. P>
"", x " code> retournera [" "," x "] code>. La chaîne vide avant le principal , code> est incluse et la chaîne vide après le suivi , code> est exclue, car le Javadoc dit SO STRUT>: < EM> "Les chaînes vides de traînant ne sont donc pas incluses dans la matrice résultante" em>. p>
"" code> retournera [""] code>, car le Javadoc dit explicitement que < / Fort>: "Si l'expression ne correspond à aucune partie de l'entrée, la matrice résultante n'a qu'un seul élément, à savoir cette chaîne" em>. Notez comment la règle "String Trailing vide" n'est pas appliquée à ce cas d'utilisation spécifique. P>
",", " code> retournera [] code>, car les chaînes vides suivantes sont exclues. P>
J'ai modifié la regex et déplacé "s = s.trim ()" juste après le "scan.close ()" et ça fonctionnait!
if (scan.hasNext()) {
s = scan.nextLine();
} else {
System.out.println(0);
return;
}
I edited your code a bit. For no String you have to use Scanner.hasNext(). If there is a String you will read it, otherwise just return and print 0.
mais là vous venez de lire la première chaîne et non de plusieurs lignes, comme la question
@ AuryN31 Ouais à droite mais à cette question, l'entrée n'est qu'une ligne de cordes
Le problème est avec .trim (), déplacez-le avant S.Length ()
mon code de travail
Qu'est-ce que vous essayez de faire? Diviser une chaîne par des caractères non mot? Si oui c'est juste (\ w +)
1)
nextline () code> ne peut pas retournernull code>, doncs code> ne peut pas êtrenull code>, rendant les = = null code> superflu. --- 2)s.length () == 0 code> est mieux écrit commeS.Impty () code>. --- 3) Vous devriez déplacers = s.trim () code> avant la vérification de la chaîne vide, une ligne de rien que des espaces sont traités correctement.avec
si (S.Length () == 0 || s == null) { code> Vérifiez le null d'abord@Scarywombat Pas besoin, voir mon commentaire précédent, mais une observation généralement valide.
Pour toute personne désirant voir la description complète du défi: Java String Jetkens | Hackerrank