如何检查单个字符是否出现在string中?

在Java中有一种方法来检查条件:

“这个单个字符是否出现在stringx中”

使用循环?

你可以使用string.indexOf('a')

如果string存在'a' ,则返回索引(> = 0)。 如果不是,则返回-1。 所以,非负的返回值意味着'a' is present in the string

  • String.contains()检查string是否包含指定的char值序列
  • String.indexOf()返回指定字符或子string第一次出现的string内的索引(这个方法有4个变种)

我不确定原来的海报究竟在问什么。 由于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,行数会增加。 但是根本没有循环/循环。 如果您担心length()使用循环,您甚至可以删除长度检查。

 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"); } 

要检查一个string中是否不存在某个东西,至less需要查看string中的每个字符。 所以,即使你没有明确地使用一个循环,它也会有相同的效率。 这就是说,你可以尝试使用str.contains(“”+ char)。

是的,在string类上使用indexOf()方法。 请参阅此方法的API文档

如果您需要经常检查相同的string,则可以预先计算字符出现次数。 这是一个使用长数组中包含的位数组的实现:

 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; }} 
 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()); } 

//这只是主要的…你可以使用枯萎缓冲阅读器或扫描仪

 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...