ใน Java มีวิธีตรวจสอบเงื่อนไข:
"อักขระนี้ปรากฏในสตริง x ทุกครั้งหรือไม่"
โดยไม่ใช้ลูป?
ใน Java มีวิธีตรวจสอบเงื่อนไข:
"อักขระนี้ปรากฏในสตริง x ทุกครั้งหรือไม่"
โดยไม่ใช้ลูป?
คำตอบ:
string.indexOf('a')
คุณสามารถใช้
ถ้าถ่านa
อยู่ในstring
:
มันจะส่งกลับดัชนีของการเกิดขึ้นครั้งแรกของตัวละครในลำดับตัวละครที่เป็นตัวแทนจากวัตถุนี้หรือ -1 ถ้าตัวละครไม่ได้เกิดขึ้น
indexOf()
ใช้วนรอบภายใน Duplicate
ไม่มีคำตอบที่ถูกต้องจะช่วยให้การแก้ปัญหาและถ้าคนที่จะกล้าถามคำถามใหม่คนประกาศว่า น่าผิดหวังจริงๆ (
String.contains()
ซึ่งจะตรวจสอบว่าสตริงมีลำดับถ่านที่ระบุหรือไม่String.indexOf()
ซึ่งส่งกลับดัชนีภายในสตริงของการเกิดขึ้นครั้งแรกของอักขระที่ระบุหรือสตริงย่อย (มี 4 รูปแบบของวิธีนี้)String.contains(""+c)
ฉันไม่แน่ใจว่าสิ่งที่โปสเตอร์ต้นฉบับถามอย่างถูกต้อง เนื่องจาก indexOf (... ) และมี (... ) ทั้งคู่อาจใช้การวนซ้ำภายในบางทีเขาอาจต้องการดูว่าสิ่งนี้เป็นไปได้หรือไม่โดยไม่ต้องวนซ้ำ? ฉันสามารถคิดถึงสองวิธีในมือแน่นอนจะเกิดขึ้นอีกครั้ง:
public boolean containsChar(String s, char search) {
if (s.length() == 0)
return false;
else
return s.charAt(0) == search || containsChar(s.substring(1), search);
}
อีกอันหนึ่งดูสง่าน้อยกว่า แต่ก็ครบถ้วน ... :
/**
* 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;
}
จำนวนบรรทัดเพิ่มขึ้นตามที่คุณต้องการเพื่อรองรับสตริงที่ยาวขึ้นและยาวขึ้น แต่ไม่มีลูป / การเกิดซ้ำเลย คุณสามารถลบการตรวจสอบความยาวได้หากคุณกังวลว่าความยาวนั้น () ใช้การวนซ้ำ
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");
}
คุณสามารถใช้ 2 วิธีจากString
ชั้นเรียน
String.contains()
ซึ่งจะตรวจสอบว่าสตริงมีลำดับถ่านที่ระบุหรือไม่String.indexOf()
ซึ่งส่งกลับดัชนีภายในสตริงของการเกิดขึ้นครั้งแรกของอักขระที่ระบุหรือสตริงย่อยหรือส่งกลับ -1 หากไม่พบอักขระ (มี 4 รูปแบบของวิธีการนี้)วิธีที่ 1:
String myString = "foobar";
if (myString.contains("x") {
// Do something.
}
วิธีที่ 2:
String myString = "foobar";
if (myString.indexOf("x") >= 0 {
// Do something.
}
ลิงค์โดย: Zach Scrivena
ในการตรวจสอบว่ามีบางสิ่งที่ไม่มีอยู่ในสตริงคุณต้องดูอักขระอย่างน้อยหนึ่งตัวในสตริง ดังนั้นแม้ว่าคุณจะไม่ได้ใช้ลูปอย่างชัดเจน แต่ก็จะมีประสิทธิภาพเหมือนกัน ที่ถูกกล่าวว่าคุณสามารถลองใช้ str.contain ("" + char)
หากคุณจำเป็นต้องตรวจสอบสตริงเดียวกันบ่อยครั้งคุณสามารถคำนวณอักขระที่เกิดขึ้นได้ล่วงหน้า นี่คือการใช้งานที่ใช้บิตอาร์เรย์ที่มีอยู่ในอาร์เรย์ยาว:
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;
}}
ใช่ใช้เมธอด indexOf () กับคลาสสตริง ดูเอกสารประกอบ API สำหรับวิธีนี้
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
ตอนนี้ไม่วนซ้ำหรอ
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
ด้านล่างเป็นสิ่งที่คุณกำลังมองหา?
int index = string.indexOf(character);
return index != -1 && string.lastIndexOf(character) != index;
&& string.lastIndexOf(character) != index
คุณจะไม่สามารถตรวจสอบว่าถ่านปรากฏขึ้นในบางสายโดยไม่ต้องผ่านสายอักขระอย่างน้อยหนึ่งครั้งโดยใช้การวนซ้ำ / การเรียกซ้ำ (วิธีการในตัวเช่น indexOf ใช้การวนซ้ำ)
ถ้าไม่มี จำนวนครั้งที่คุณค้นหาว่า char อยู่ใน string xเป็นวิธีมากกว่าความยาวของสตริงมากกว่าที่ฉันอยากจะแนะนำให้ใช้โครงสร้างข้อมูลSetเนื่องจากจะมีประสิทธิภาพมากกว่าการใช้indexOf
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
ใช้ชุดคุณจะสามารถตรวจสอบว่าตัวละครที่มีอยู่ในสตริงในเวลาคงที่ O (1) แต่คุณจะใช้หน่วยความจำเพิ่มเติม (ความซับซ้อนของพื้นที่จะเป็น O (n))
ฉันใช้ string.includes () วิธีการนี้ซึ่งผลตอบแทนจริงหรือเท็จหากพบสตริงหรือตัวอักษร ดูเอกสารด้านล่าง
// นี่เป็นเพียงหลัก ... คุณสามารถใช้เครื่องอ่านหรือสแกนเนอร์แบบบัฟเฟอร์
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...