Trong Java có một cách để kiểm tra điều kiện:
"Có phải ký tự đơn này xuất hiện ở tất cả trong chuỗi x"
mà không sử dụng một vòng lặp?
Trong Java có một cách để kiểm tra điều kiện:
"Có phải ký tự đơn này xuất hiện ở tất cả trong chuỗi x"
mà không sử dụng một vòng lặp?
Câu trả lời:
Bạn có thể sử dụng string.indexOf('a')
.
Nếu char a
có mặt trong string
:
nó trả về chỉ số xuất hiện đầu tiên của ký tự trong chuỗi ký tự được đại diện bởi đối tượng này hoặc -1 nếu ký tự không xảy ra.
indexOf()
dụng vòng lặp sử dụng nội bộ. Không có câu trả lời nào đưa ra giải pháp chính xác và nếu ai đó dám hỏi một câu hỏi mới, mọi người sẽ tuyên bố nó Duplicate
. Thật đáng thất vọng; (
String.contains()
trong đó kiểm tra xem chuỗi có chứa một chuỗi các giá trị char được chỉ định khôngString.indexOf()
trong đó trả về chỉ mục trong chuỗi xuất hiện đầu tiên của ký tự hoặc chuỗi con được chỉ định (có 4 biến thể của phương thức này)String.contains(""+c)
Tôi không chắc chắn những gì các poster ban đầu đang hỏi chính xác. Vì indexOf (...) và chứa (...) cả hai có thể sử dụng các vòng lặp bên trong, có lẽ anh ấy đang tìm kiếm để xem liệu điều này có khả thi hay không mà không có vòng lặp? Tôi có thể nghĩ ra hai cách, tất nhiên một là sẽ tái phát:
public boolean containsChar(String s, char search) {
if (s.length() == 0)
return false;
else
return s.charAt(0) == search || containsChar(s.substring(1), search);
}
Khác là ít thanh lịch, nhưng đầy đủ ...:
/**
* 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;
}
Số lượng dòng tăng lên khi bạn cần hỗ trợ chuỗi dài hơn và dài hơn tất nhiên. Nhưng không có vòng lặp / tái phát nào cả. Bạn thậm chí có thể xóa kiểm tra độ dài nếu bạn lo ngại rằng độ dài đó () sử dụng vòng lặp.
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");
}
Bạn có thể sử dụng 2 phương thức từ String
lớp.
String.contains()
trong đó kiểm tra xem chuỗi có chứa một chuỗi các giá trị char được chỉ định khôngString.indexOf()
trong đó trả về chỉ mục trong chuỗi xuất hiện đầu tiên của ký tự hoặc chuỗi con được chỉ định hoặc trả về -1 nếu không tìm thấy ký tự (có 4 biến thể của phương thức này)Cách 1:
String myString = "foobar";
if (myString.contains("x") {
// Do something.
}
Cách 2:
String myString = "foobar";
if (myString.indexOf("x") >= 0 {
// Do something.
}
Liên kết bởi: Zach Scrivena
Để kiểm tra xem một cái gì đó không tồn tại trong một chuỗi, ít nhất bạn cần xem xét từng ký tự trong một chuỗi. Vì vậy, ngay cả khi bạn không sử dụng một vòng lặp rõ ràng, nó sẽ có hiệu quả tương tự. Điều đó đang được nói, bạn có thể thử sử dụng str.contains ("" + char).
Nếu bạn cần kiểm tra cùng một chuỗi thường xuyên, bạn có thể tính toán các lần xuất hiện của ký tự. Đây là một triển khai sử dụng một mảng bit chứa trong một mảng dài:
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;
}}
Có, sử dụng phương thức indexOf () trên lớp chuỗi. Xem tài liệu API cho phương pháp này
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
bây giờ không phải là một vòng lặp?
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
Là dưới đây những gì bạn đang tìm kiếm?
int index = string.indexOf(character);
return index != -1 && string.lastIndexOf(character) != index;
&& string.lastIndexOf(character) != index
Bạn sẽ không thể kiểm tra xem char có xuất hiện ở tất cả các chuỗi không mà ít nhất là đi qua chuỗi một lần bằng cách sử dụng vòng lặp / đệ quy (các phương thức tích hợp sẵn như indexOf cũng sử dụng một vòng lặp)
Nếu không. số lần bạn tìm kiếm nếu một char trong chuỗi x nhiều hơn độ dài của chuỗi so với tôi khuyên bạn nên sử dụng Cấu trúc dữ liệu Đặt vì điều đó sẽ hiệu quả hơn so với sử dụng đơn giảnindexOf
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
Sử dụng tập hợp, bạn sẽ có thể kiểm tra xem ký tự có tồn tại trong một chuỗi trong thời gian không đổi O (1) không nhưng bạn cũng sẽ sử dụng bộ nhớ bổ sung (Độ phức tạp không gian sẽ là O (n)).
Tôi đã sử dụng phương thức string.includes () cho phương thức này trả về true hoặc false nếu tìm thấy chuỗi hoặc ký tự. Xem tài liệu dưới đây.
// đây chỉ là chính ... bạn có thể sử dụng trình đọc hoặc trình quét bộ đệm khô héo
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...