En Java, existe-t-il un moyen de vérifier la condition:
"Ce caractère unique apparaît-il du tout dans la chaîne x"
sans utiliser de boucle?
En Java, existe-t-il un moyen de vérifier la condition:
"Ce caractère unique apparaît-il du tout dans la chaîne x"
sans utiliser de boucle?
Réponses:
Vous pouvez utiliser string.indexOf('a')
.
Si l'omble a
est présent dans string
:
il renvoie l'index de la première occurrence du caractère dans la séquence de caractères représentée par cet objet, ou -1 si le caractère ne se produit pas.
indexOf()
usages bouclent en interne. Aucune des réponses ne donne de solution correcte et si quelqu'un ose poser une nouvelle question, les gens la déclarent Duplicate
. Vraiment décevant; (
String.contains()
qui vérifie si la chaîne contient une séquence spécifiée de valeurs charString.indexOf()
qui renvoie l'index dans la chaîne de la première occurrence du caractère ou de la sous-chaîne spécifié (il existe 4 variantes de cette méthode)String.contains(""+c)
Je ne sais pas exactement ce que l'affiche originale demande. Comme indexOf (...) et contains (...) utilisent tous deux probablement des boucles en interne, peut-être qu'il cherche à voir si cela est possible sans boucle? Je peux penser à deux manières différentes, l'une serait bien sûr la récurrence:
public boolean containsChar(String s, char search) {
if (s.length() == 0)
return false;
else
return s.charAt(0) == search || containsChar(s.substring(1), search);
}
L'autre est beaucoup moins élégant, mais complet ...:
/**
* Works for strings of up to 5 characters
*/
public boolean containsChar(String s, char search) {
if (s.length() > 5) throw IllegalArgumentException();
try {
if (s.charAt(0) == search) return true;
if (s.charAt(1) == search) return true;
if (s.charAt(2) == search) return true;
if (s.charAt(3) == search) return true;
if (s.charAt(4) == search) return true;
} catch (IndexOutOfBoundsException e) {
// this should never happen...
return false;
}
return false;
}
Le nombre de lignes augmente à mesure que vous avez besoin de supporter des chaînes de plus en plus longues bien sûr. Mais il n'y a pas du tout de boucles / récurrences. Vous pouvez même supprimer la vérification de la longueur si vous pensez que cette longueur () utilise une boucle.
String temp = "abcdefghi";
if(temp.indexOf("b")!=-1)
{
System.out.println("there is 'b' in temp string");
}
else
{
System.out.println("there is no 'b' in temp string");
}
Vous pouvez utiliser 2 méthodes de la String
classe.
String.contains()
qui vérifie si la chaîne contient une séquence spécifiée de valeurs charString.indexOf()
qui renvoie l'index dans la chaîne de la première occurrence du caractère ou de la sous-chaîne spécifié ou renvoie -1 si le caractère n'est pas trouvé (il existe 4 variantes de cette méthode)Méthode 1:
String myString = "foobar";
if (myString.contains("x") {
// Do something.
}
Méthode 2:
String myString = "foobar";
if (myString.indexOf("x") >= 0 {
// Do something.
}
Liens par: Zach Scrivena
Pour vérifier si quelque chose n'existe pas dans une chaîne, vous devez au moins regarder chaque caractère d'une chaîne. Ainsi, même si vous n'utilisez pas explicitement une boucle, elle aura la même efficacité. Cela étant dit, vous pouvez essayer d'utiliser str.contains ("" + char).
Si vous devez souvent vérifier la même chaîne, vous pouvez calculer les occurrences de caractères à l'avance. Il s'agit d'une implémentation qui utilise un tableau de bits contenu dans un tableau long:
public class FastCharacterInStringChecker implements Serializable {
private static final long serialVersionUID = 1L;
private final long[] l = new long[1024]; // 65536 / 64 = 1024
public FastCharacterInStringChecker(final String string) {
for (final char c: string.toCharArray()) {
final int index = c >> 6;
final int value = c - (index << 6);
l[index] |= 1L << value;
}
}
public boolean contains(final char c) {
final int index = c >> 6; // c / 64
final int value = c - (index << 6); // c - (index * 64)
return (l[index] & (1L << value)) != 0;
}}
Oui, en utilisant la méthode indexOf () sur la classe de chaîne. Voir la documentation de l'API pour cette méthode
package com;
public class _index {
public static void main(String[] args) {
String s1="be proud to be an indian";
char ch=s1.charAt(s1.indexOf('e'));
int count = 0;
for(int i=0;i<s1.length();i++) {
if(s1.charAt(i)=='e'){
System.out.println("number of E:=="+ch);
count++;
}
}
System.out.println("Total count of E:=="+count);
}
}
for
n'est pas une boucle maintenant?
String s="praveen";
boolean p=s.contains("s");
if(p)
System.out.println("string contains the char 's'");
else
System.out.println("string does not contains the char 's'");
string does not contains the char 's'
static String removeOccurences(String a, String b)
{
StringBuilder s2 = new StringBuilder(a);
for(int i=0;i<b.length();i++){
char ch = b.charAt(i);
System.out.println(ch+" first index"+a.indexOf(ch));
int lastind = a.lastIndexOf(ch);
for(int k=new String(s2).indexOf(ch);k > 0;k=new String(s2).indexOf(ch)){
if(s2.charAt(k) == ch){
s2.deleteCharAt(k);
System.out.println("val of s2 : "+s2.toString());
}
}
}
System.out.println(s1.toString());
return (s1.toString());
}
you can use this code. It will check the char is present or not. If it is present then the return value is >= 0 otherwise it's -1. Here I am printing alphabets that is not present in the input.
import java.util.Scanner;
public class Test {
public static void letters()
{
System.out.println("Enter input char");
Scanner sc = new Scanner(System.in);
String input = sc.next();
System.out.println("Output : ");
for (char alphabet = 'A'; alphabet <= 'Z'; alphabet++) {
if(input.toUpperCase().indexOf(alphabet) < 0)
System.out.print(alphabet + " ");
}
}
public static void main(String[] args) {
letters();
}
}
//Ouput Example
Enter input char
nandu
Output :
B C E F G H I J K L M O P Q R S T V W X Y Z
Est-ce que ce que vous cherchiez ci-dessous?
int index = string.indexOf(character);
return index != -1 && string.lastIndexOf(character) != index;
&& string.lastIndexOf(character) != index
Vous ne pourrez pas vérifier si char apparaît du tout dans une chaîne sans au moins parcourir la chaîne une fois en utilisant boucle / récursivité (les méthodes intégrées comme indexOf utilisent également une boucle)
Si le non. de fois que vous recherchez si un caractère est dans la chaîne x est bien plus que la longueur de la chaîne que je recommanderais d'utiliser une structure de données Set car cela serait plus efficace que d'utiliser simplementindexOf
String s = "abc";
// Build a set so we can check if character exists in constant time O(1)
Set<Character> set = new HashSet<>();
int len = s.length();
for(int i = 0; i < len; i++) set.add(s.charAt(i));
// Now we can check without the need of a loop
// contains method of set doesn't use a loop unlike string's contains method
set.contains('a') // true
set.contains('z') // false
En utilisant set, vous pourrez vérifier si un caractère existe dans une chaîne à temps constant O (1) mais vous utiliserez également de la mémoire supplémentaire (la complexité de l'espace sera O (n)).
J'ai utilisé la méthode string.includes () pour cela qui retourne vrai ou faux si la chaîne ou le caractère est trouvé. Voir la documentation ci-dessous.
// ce n'est que le principal ... vous pouvez utiliser un lecteur ou un scanner avec mémoire tampon
string s;
int l=s.length();
int f=0;
for(int i=0;i<l;i++)
{
char ch1=s.charAt(i);
for(int j=0;j<l;j++)
{
char ch2=charAt(j);
if(ch1==ch2)
{
f=f+1;
s.replace(ch2,'');
}
f=0;
}
}
//if replacing with null does not work then make it space by using ' ' and add a if condition on top.. checking if its space if not then only perform the inner loop...