Di Java apakah ada cara untuk memeriksa kondisi:
"Apakah ini karakter tunggal muncul di dalam string x"
tanpa menggunakan loop?
Anda dapat menggunakan string.indexOf('a')
.
Jika
'a'
hadir distring
, kembali index(>=0). Jika tidak, itu kembali -1. Jadi, non-negatif kembali nilai berarti bahwa'a' hadir dalam string
.
String.berisi()
yang memeriksa jika string mengandung ditentukan urutan char nilai-nilaiString.indexOf()
yang kembali naik dalam string pertama kejadian tertentu karakter atau substring (ada 4 variasi dari metode ini)I'm tidak yakin apa yang asli poster meminta persis. Sejak indexOf(...) dan berisi(...) baik yang mungkin menggunakan loop internal, mungkin dia's mencari untuk melihat apakah hal ini mungkin sama sekali tanpa loop? Saya bisa memikirkan dua cara lepas tangan, salah satu tentu saja menjadi recurrsion:
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 adalah jauh lebih elegan, tapi 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 baris tumbuh sebagai anda perlu dukungan lebih lama dan lebih lama string saja. Tapi tidak ada loop/recurrsions sama sekali. Anda bahkan dapat menghapus suhu udara turun memeriksa apakah anda're bersangkutan bahwa panjang() menggunakan loop.
Anda dapat menggunakan 2 metode dari String
kelas.
String.berisi()
yang memeriksa jika string mengandung ditentukan urutan char nilai-nilaiString.indexOf()
yang kembali naik dalam string pertama kejadian tertentu karakter atau substring atau mengembalikan -1 jika karakter ini tidak ditemukan (ada 4 variasi dari 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.
}
Link: Zach Scrivena
Jika anda perlu untuk check string yang sama sering anda dapat menghitung karakter kemunculan up-front. Ini adalah sebuah implementasi yang menggunakan sedikit array yang terkandung menjadi panjang array:
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;
}}
Untuk memeriksa apakah sesuatu yang tidak ada dalam string, anda setidaknya perlu melihat setiap karakter dalam sebuah string. Jadi bahkan jika anda don't secara eksplisit menggunakan loop, it'll memiliki efisiensi yang sama. Yang sedang berkata, anda dapat mencoba menggunakan str.mengandung(""+char).
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);
}
}
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
Anda memenangkan't dapat memeriksa apakah char muncul di beberapa string tanpa minimal akan lebih string sekali menggunakan loop / rekursi ( built-in metode seperti indexOf juga menggunakan loop )
Jika tidak ada. kali anda melihat jika char string x adalah cara yang lebih lebih dari panjang string dari saya akan merekomendasikan menggunakan Set struktur data seperti itu akan lebih efisien daripada hanya menggunakan indexOf
`` String s = "abc";
// Membangun set, sehingga kita dapat memeriksa apakah karakter yang ada dalam waktu yang konstan O(1)
Set
// Sekarang kita dapat memeriksa tanpa perlu loop // berisi metode set doesn't menggunakan loop seperti string's berisi metode set.mengandung('a') // benar set.mengandung('z') // salah ``
Menggunakan set anda akan dapat memeriksa apakah karakter yang ada pada string di waktu yang konstan O(1), tetapi anda juga akan menggunakan memori tambahan ( Ruang kompleksitas akan menjadi O(n) ).
//ini hanya main... anda dapat menggunakan layu 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...