Créez une fonction qui prend un tableau de chaînes et renvoie un tableau contenant uniquement les chaînes contenant des nombres. S'il n'y a pas de chaînes contenant des nombres, renvoyez un tableau vide.
Exemples numInStr (["1a", "a", "2b", "b"]) âžž ["1a", "2b"]
numInStr (["abc", "abc10"]) âžž ["abc10"]
numInStr (["abc", "ab10c", "a10bc", "bcd"]) âžž ["ab10c", "a10bc"]
numInStr (["ceci est un test", "test1"]) âžž ["test1"]
C'est mon code
import java.util.ArrayList;
public class Challenge {
public static String[] numInStr(String[] arr) {
boolean addWord = false;
ArrayList<String> output = new ArrayList<String>();
for (String word: arr){
for (int i =0; i<word.length(); i++){
if (Character.isDigit(word.charAt(i))){
addWord = true;
}
}
if (addWord) {
output.add(word);
addWord=false;
}
return output;
}
}
}
Qu'est-ce qui ne va pas?
Aussi pourquoi dois-je définir un type pour arraylist? Chaque fois que je le fais, il dit que c'est dangereux. Comment créer une arraylist contenant plusieurs types de données?
4 Réponses :
String[] et ArrayList<String> sont de types différents. Vous devez modifier la déclaration de votre méthode ou convertir ArrayList en tableau avant de retourner:
ArrayList<Object>
Aussi pourquoi dois-je définir un type pour arraylist?
ArrayList doit déclarer le type de ses éléments. Pour une liste avec tous les éléments, utilisez:
return output.toArray(new String[0]);
pourquoi dois-je inclure la nouvelle chaîne [0] entre crochets?
Je comprends que c'est pour créer un nouveau tableau de chaînes mais [0] cela ne définit-il pas la taille à zéro? et vous ne pouvez pas changer les tailles de tableau non?
Cette String[0] est transmise uniquement pour définir le type de tableau que vous souhaitez créer. La raison pour laquelle cela est nécessaire tient au fait que les tableaux ont un type spécifique à l'exécution, mais pas une ArrayList . L'effacement de type supprime toutes les informations de type générique du code. Ainsi, au moment de l'exécution, le code ne peut pas savoir quel type de tableau créer à moins qu'il n'ait un autre tableau à partir duquel obtenir le type. Vous pouvez également transmettre un tableau suffisamment grand pour contenir le résultat, et le code utilisera alors simplement ce tableau.
Vous ne pouvez pas renvoyer un type de données différent, ArrayLists et Arrays sont de types différents. Utilisation
retourne output.toArray (new String [0]);
convertir d'abord la liste en tableau
La valeur de retour doit correspondre au type de retour. Puisque vous avez déclaré le type de retour comme String[] , vous devez renvoyer un String[] que vous pouvez faire en renvoyant output.toArray(new String[0]) .
En dehors de cela, vous pouvez résoudre le problème en utilisant l'API Java Regex d'une manière beaucoup plus simple et plus propre:
[1a, 2b]
Production:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
// Test
String[] arr = { "1a", "a", "2b", "b" };
System.out.println(Arrays.toString(numInStr(arr)));
}
public static String[] numInStr(String[] arr) {
Pattern pattern = Pattern.compile("\\d+");// One or more digits
List<String> output = new ArrayList<>();
for (String s : arr) {
if (pattern.matcher(s).find()) {
output.add(s);
}
}
return output.toArray(new String[0]);
}
}
import java.util. *;
Classe publique ArrayListTOArray {public static void main (String [] args) {
/*ArrayList declaration and initialization*/
ArrayList<String> arrlist= new ArrayList<String>();
arrlist.add("String1");
arrlist.add("String2");
arrlist.add("String3");
arrlist.add("String4");
/*ArrayList to Array Conversion */
String array[] = new String[arrlist.size()];
for(int j =0;j<arrlist.size();j++){
array[j] = arrlist.get(j);
}
/*Displaying Array elements*/
for(String k: array)
{
System.out.println(k);
}
}
}
Votre réponse est 1) en retard (question déjà répondue), 2) une réponse de code uniquement (mal vue), 3) faire quelque chose de dur qui peut être fait en 1 ligne de code de bibliothèque, 4) pas formaté correctement, et 5 ) ne répond pas à la question.
Lire les instructions: essayez-vous de renvoyer une ArrayList ou un tableau? Comme ce sont deux structures de données différentes .
Est-ce que cela répond à votre question? Conversion de 'ArrayList <String> en' String [] 'en Java
Votre code a un autre problème. Votre déclaration de
returnest au mauvais endroit. Je suppose que votre compilateur devrait vous en parler une fois que vous aurez résolu le problème du type de retour.Effectuez toujours une recherche approfondie sur Stack Overflow avant de publier.
En apprenant la programmation, vous vous rendrez compte qu'il y a très peu de fois où vous voudrez avoir plusieurs types dans une liste. Vous pouvez le faire, mais c'est presque toujours une erreur.