Di Jawa apakah ada cara untuk memeriksa kondisinya:
"Apakah karakter tunggal ini muncul sama sekali dalam string x"
tanpa menggunakan loop?
Di Jawa apakah ada cara untuk memeriksa kondisinya:
"Apakah karakter tunggal ini muncul sama sekali dalam string x"
tanpa menggunakan loop?
Jawaban:
Anda bisa menggunakannya string.indexOf('a')
.
Jika char a
hadir di string
:
itu mengembalikan indeks kemunculan karakter pertama dalam urutan karakter yang diwakili oleh objek ini, atau -1 jika karakter tidak muncul.
indexOf()
menggunakan loop secara internal. Tidak ada jawaban yang memberikan solusi yang benar dan jika seseorang berani mengajukan pertanyaan baru, orang-orang menyatakannya Duplicate
. Sangat mengecewakan; (
String.contains()
yang memeriksa apakah string berisi urutan nilai char yang ditentukanString.indexOf()
yang mengembalikan indeks dalam string kemunculan pertama karakter atau substring yang ditentukan (ada 4 variasi metode ini)String.contains(""+c)
Saya tidak yakin apa yang ditanyakan oleh pengirim aslinya. Karena indexOf (...) dan berisi (...) keduanya mungkin menggunakan loop secara internal, mungkin dia mencari untuk melihat apakah ini mungkin sama sekali tanpa loop? Saya bisa memikirkan dua cara, satu tentu saja akan menjadi pengulangan:
public boolean containsChar(String s, char search) {
if (s.length() == 0)
return false;
else
return s.charAt(0) == search || containsChar(s.substring(1), search);
}
Yang lain jauh kurang elegan, tetapi kelengkapan ...:
/**
* 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;
}
Jumlah garis bertambah karena Anda perlu mendukung string yang lebih lama dan lebih lama tentu saja. Tetapi tidak ada loop / rekursi sama sekali. Anda bahkan dapat menghapus pemeriksaan panjang jika Anda khawatir panjang itu () menggunakan loop.
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");
}
Anda dapat menggunakan 2 metode dari String
kelas.
String.contains()
yang memeriksa apakah string berisi urutan nilai char yang ditentukanString.indexOf()
yang mengembalikan indeks dalam string kemunculan pertama karakter yang ditentukan atau substring atau mengembalikan -1 jika karakter tidak ditemukan (ada 4 variasi metode ini)Metode 1:
String myString = "foobar";
if (myString.contains("x") {
// Do something.
}
Metode 2:
String myString = "foobar";
if (myString.indexOf("x") >= 0 {
// Do something.
}
Tautan oleh: Zach Scrivena
Untuk memeriksa apakah ada sesuatu yang tidak ada dalam sebuah string, Anda setidaknya perlu melihat setiap karakter dalam sebuah string. Jadi, bahkan jika Anda tidak secara eksplisit menggunakan loop, itu akan memiliki efisiensi yang sama. Yang sedang berkata, Anda dapat mencoba menggunakan str.contains ("" + char).
Jika Anda perlu memeriksa string yang sama sering Anda dapat menghitung kemunculan karakter di muka. Ini adalah implementasi yang menggunakan bit array yang terkandung dalam array panjang:
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;
}}
Ya, menggunakan metode indexOf () pada kelas string. Lihat dokumentasi API untuk metode ini
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
bukan loop sekarang?
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
Apakah di bawah ini yang Anda cari?
int index = string.indexOf(character);
return index != -1 && string.lastIndexOf(character) != index;
&& string.lastIndexOf(character) != index
Anda tidak akan dapat memeriksa apakah char muncul sama sekali dalam beberapa string tanpa setidaknya melewati string sekali menggunakan loop / rekursi (metode built-in seperti indexOf juga menggunakan loop)
Jika tidak. kali Anda mencari jika char dalam string x lebih banyak daripada panjang string daripada saya akan merekomendasikan menggunakan struktur data Set karena itu akan lebih efisien daripada hanya menggunakanindexOf
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
Menggunakan set Anda akan dapat memeriksa apakah karakter ada dalam string dalam waktu konstan O (1) tetapi Anda juga akan menggunakan memori tambahan (Kompleksitas ruang akan menjadi O (n)).
Saya menggunakan metode string.includes () untuk ini yang mengembalikan benar atau salah jika string atau karakter ditemukan. Lihat dokumentasi di bawah ini.
// ini hanya utama ... Anda dapat menggunakan wither buffered reader atau scanner
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...