如何从string中删除单个字符
为了访问Java中的string的单个字符,我们有String.charAt(2)
。 是否有任何内置函数来删除一个string在java中的个人字符?
像这样的东西:
if(String.charAt(1) == String.charAt(2){ //I want to remove the individual character at index 2. }
你也可以使用可变的StringBuilder
类。
StringBuilder sb = new StringBuilder(inputString);
它有deleteCharAt()
方法以及许多其他的方法。
只要删除你需要删除的字符,然后得到如下结果:
String resultString = sb.toString();
这避免了创build不必要的string对象。
一种可能性:
String result = str.substring(0, index) + str.substring(index+1);
请注意,结果是一个新的String(以及两个中间String对象),因为Java中的Strings是不可变的。
您可以使用名为replace的Java String方法,它将用第二个参数replace与第一个参数匹配的所有字符:
String a = "Cool"; a = a.replace("o",""); //variable 'a' contains the string "Cl"
不,因为Java中的string是不可改变的。 你必须创build一个新的string,删除你不想要的字符。
为了replacestringstr
中索引位置idx
处的单个字符c
,请执行下面的操作,并记住将会创build一个新的string:
String newstr = str.substring(0, idx) + str.substring(idx + 1);
String str = "M1y java8 Progr5am";
deleteCharAt()
StringBuilder bulid = new StringBuilder(str); bulid.deleteCharAt(1); // Shift the positions front. bulid.deleteCharAt(8-1); bulid.deleteCharAt(15-2); System.out.println("Builder : "+bulid);
更换()
StringBuffer buffer = new StringBuffer(str); buffer.replace(1, 2, ""); // Shift the positions front. buffer.replace(7, 8, ""); buffer.replace(13, 14, ""); System.out.println("Buffer : "+buffer);
炭[]
char[] c = str.toCharArray(); String new_Str = ""; for (int i = 0; i < c.length; i++) { if (!(i == 1 || i == 8 || i == 15)) new_Str += c[i]; } System.out.println("Char Array : "+new_Str);
考虑下面的代码:
public String removeChar(String str, Integer n) { String front = str.substring(0, n); String back = str.substring(n+1, str.length()); return front + back; }
你也可以使用(巨大的)正则expression式机器。
inputString = inputString.replaceFirst("(?s)(.{2}).(.*)", "$1$2");
-
"(?s)" -
告诉正则expression式像普通字符一样处理换行符(以防万一)。 -
"(.{2})" -
组$ 1正好收集2个字符 -
"." -
"." -
索引2处的任何字符(被挤出)。 -
"(.*)" -
组$ 2收集inputString的其余部分。 -
"$1$2" -
将组1和组2组合在一起。
使用String类的replaceFirst函数。 replace函数的变体有很多,您可以使用。
如果您需要对字符移除进行一些逻辑控制,请使用此操作
String string = "sdsdsd"; char[] arr = string.toCharArray(); // Run loop or whatever you need String ss = new String(arr);
如果你不需要任何这样的控制,你可以使用奥斯卡或Bhesh提到的。 他们在现场。
通过使用replace方法,我们可以改变string的单个字符。
string= string.replace("*", "");
从string中删除字符最简单的方法
String str="welcome"; str=str.replaceFirst(String.valueOf(str.charAt(2)),"");//'l' will replace with "" System.out.println(str);//output: wecome
public static String removechar(String fromString, Character character) { int indexOf = fromString.indexOf(character); if(indexOf==-1) return fromString; String front = fromString.substring(0, indexOf); String back = fromString.substring(indexOf+1, fromString.length()); return front+back; }
public class RemoveCharFromString { public static void main(String[] args) { String output = remove("Hello", 'l'); System.out.println(output); } private static String remove(String input, char c) { if (input == null || input.length() <= 1) return input; char[] inputArray = input.toCharArray(); char[] outputArray = new char[inputArray.length]; int outputArrayIndex = 0; for (int i = 0; i < inputArray.length; i++) { char p = inputArray[i]; if (p != c) { outputArray[outputArrayIndex] = p; outputArrayIndex++; } } return new String(outputArray, 0, outputArrayIndex); } }
BufferedReader input=new BufferedReader(new InputStreamReader(System.in)); String line1=input.readLine(); String line2=input.readLine(); char[] a=line2.toCharArray(); char[] b=line1.toCharArray(); loop: for(int t=0;t<a.length;t++) { char a1=a[t]; for(int t1=0;t1<b.length;t1++) { char b1=b[t1]; if(a1==b1) { StringBuilder sb = new StringBuilder(line1); sb.deleteCharAt(t1); line1=sb.toString(); b=line1.toCharArray(); list.add(a1); continue loop; } }
*可以使用StringBuilder和deletecharAt删除string值。
String s1 = "aabc"; StringBuilder sb = new StringBuilder(s1); for(int i=0;i<sb.length();i++) { char temp = sb.charAt(0); if(sb.indexOf(temp+"")!=1) { sb.deleteCharAt(sb.indexOf(temp+"")); } }
例如,如果要计算string中有多less个a,可以这样做:
if (string.contains("a")) { numberOf_a++; string = string.replaceFirst("a", ""); }
在大多数情况下,使用StringBuilder
或substring
是一个很好的方法(正如已经回答的那样)。 但是,对于性能严重的代码,这可能是一个很好的select。
/** * Delete a single character from index position 'start' from the 'target' String. * * ```` * deleteAt("ABC", 0) -> "BC" * deleteAt("ABC", 1) -> "B" * deleteAt("ABC", 2) -> "C" * ```` */ public static String deleteAt(final String target, final int start) { return deleteAt(target, start, start + 1); } /** * Delete the characters from index position 'start' to 'end' from the 'target' String. * * ```` * deleteAt("ABC", 0, 1) -> "BC" * deleteAt("ABC", 0, 2) -> "C" * deleteAt("ABC", 1, 3) -> "A" * ```` */ public static String deleteAt(final String target, final int start, int end) { final int targetLen = target.length(); if (start < 0) { throw new IllegalArgumentException("start=" + start); } if (end > targetLen || end < start) { throw new IllegalArgumentException("end=" + end); } if (start == 0) { return end == targetLen ? "" : target.substring(end); } else if (end == targetLen) { return target.substring(0, start); } final char[] buffer = new char[targetLen - end + start]; target.getChars(0, start, buffer, 0); target.getChars(end, targetLen, buffer, start); return new String(buffer); }