J'essaie de tout supprimer d'une chaîne sauf si elle correspond à un élément dans un tableau de chaînes. Je peux le faire avec des caractères individuels avec.
String[] strings = {"1","2","10"}; String foo = "1 2 3 4 5 6 7 8 9 10" String newString = ""; //some code here
4 Réponses :
Cela peut ne pas fonctionner dans toutes les situations, mais pour l'exemple spécifique que vous avez posté, nous pouvons obtenir votre résultat avec le code ci-dessous.
Fondamentalement, nous convertissons votre tableau en une liste code > Pour accéder à la méthode
contient () code>. Ensuite, nous avons divisé la chaîne d'origine
FOO code> afin que nous puissions vérifier si l'une de ces valeurs existe dans le tableau d'origine. P>
import java.util.Arrays;
import java.util.List;
class Test {
public static void main(String[] args) {
String[] strings = {"1", "2", "10"};
String foo = "1 2 3 4 5 6 7 8 9 10";
// We'll use a StringBuilder for this
StringBuilder newString = new StringBuilder();
// First, we'll convert our strings array to a List so we have access to the [contains] method
List<String> stringsList = Arrays.asList(strings);
// Now, let's split foo into an array, using the space as a delimiter
String[] foos = foo.split(" ");
// Loop through each entry of foos and compare to each element in stringsList
for (int i = 0; i < foos.length; i++) {
if (stringsList.contains(foos[i])) {
newString.append(foos[i]);
}
}
System.out.println(newString);
}
}
pas tout à fait ce que je cherche, bien essayez cependant, je cherche quelque chose qui fonctionnerait dans toutes les situations telles que si j'avais utilisé "12345678910" comme la chaîne de départ que vous obtiendriez "1210" encore
Voici ma solution:
String[] chars = {"1","2","10"}; //sort the array by length, so we check the longest string first. Arrays.sort(chars, (a,b)->b.length()-a.length()); String foo = "1 2 3 4 5 6 7 8 9 10"; String newFoo = ""; for(int i = 0; i <= foo.length();){ int j = i; for(String s : chars){ if(foo.length() > i + s.length()){ //find subString instead of character. String sub = foo.substring(i, i + s.length()); if (sub.equals(s)) { //move to the next index. Ex if 10 is at 0, next check start at 2 i += sub.length(); newFoo += sub; break; } } } // check the index if it has been modified i = i == j ? ++j : i; } System.out.println(newFoo);
Très beaux travaux presque mais parfois, il jette une exception lorsque sur le dernier index de FOO avec la ligne définissant SUB parce que i + s.length () est hors de limites une instruction simple si la relevé devrait résoudre cependant, une fois que cela est réparé I'L MARK comme la réponse
Ouais, une déclaration de contrôle simple devrait résoudre l'exception. Si cela a été utile, s'il vous plaît upvote ou marque comme une réponse correcte. Merci.
Vous pouvez essayer un code ci-dessous. Si vous souhaitez sauter des duplicats, vous pouvez utiliser définir code>,
Je les placerais dans un hashset code> puis filtrer les caractères qui ne sont pas dans cet ensemble.
// put in a nice hash set for speedy lookups.
Set<Character> chars = new HashSet(Arrays.asList('1','2','3'));
// method 1
String foo = "abc123 foo !@#";
String newFoo = "";
for(int i = 0; i < foo.length(); i++){
char c = foo.charAt(i);
if(!chars.contains(c)) {
newFoo += c;
}
}
System.out.println(newFoo);
// method 2
String result = foo.chars()
.mapToObj(c -> (char)c)
.filter(c -> !chars.contains(c))
.map(c -> String.valueOf(c))
.collect(Collectors.joining(""));
System.out.println("result is: "+result);
Votre
FOO code> est-il toujours délimité par des espaces? Avez-vous besoin d'inclure également des espaces s'ils sont trouvés dans
Strings Code>?
@Zephyr Les espaces ne seraient inclus que dans les informations de journal s'il y avait "" inclus dans la matrice, sinon ils seraient enlevés
Donc, il n'y a pas de délimiteur?
Je ne sais pas ce qu'est un délimiteur, je devine non, les espaces blancs ne sont pas importants qu'ils ne sont viens de traiter comme des caractères et aucun n'est nécessaire pour le faire fonctionner
Qu'en est-il de la chaîne 1, 10? Comment pouvez-vous prendre une décision de prendre 1 ou 10? avec la longueur?
@Andrianekenamoise Ouais je pensais que vous pouviez voir quelle est la plus longue chaîne qu'elle correspond, puis ajoutez-la à la newstring et saute sur le reste de la chaîne copiée dans la boucle