我可以用这个:
String str = "TextX Xto modifyX";
str = str.replace('X','');//that does not work because there is no such character ''
有没有办法从Java中的String中删除所有出现的字符X
?
我试过这个并不是我想要的:str.replace('X',' '); //replace with space
答案 0 :(得分:492)
尝试使用overload that takes CharSequence
arguments(例如,String
)而不是char
:
str = str.replace("X", "");
答案 1 :(得分:41)
使用
public String replaceAll(String regex, String replacement)
会奏效。
用法为str.replace("X", "");
。
执行
"Xlakjsdf Xxx".replaceAll("X", "");
返回:
lakjsdf xx
答案 2 :(得分:22)
如果您想使用Java字符串做一些事情,Commons Lang StringUtils是一个值得关注的好地方。
StringUtils.remove("TextX Xto modifyX", 'X');
答案 3 :(得分:7)
String test = "09-09-2012";
String arr [] = test.split("-");
String ans = "";
for(String t : arr)
ans+=t;
这是我从字符串中删除字符的示例。
答案 4 :(得分:4)
我喜欢在这种情况下使用RegEx:
str = str.replace(/X/g, '');
其中g表示全局,因此它将遍历整个字符串并将所有X替换为''; 如果你想要替换X和x,你只需说:
str = str.replace(/X|x/g, '');
(请参阅我的小提琴:fiddle)
答案 5 :(得分:2)
您好试试下面的代码
public class RemoveCharacter {
public static void main(String[] args){
String str = "MXy nameX iXs farXazX";
char x = 'X';
System.out.println(removeChr(str,x));
}
public static String removeChr(String str, char x){
StringBuilder strBuilder = new StringBuilder();
char[] rmString = str.toCharArray();
for(int i=0; i<rmString.length; i++){
if(rmString[i] == x){
} else {
strBuilder.append(rmString[i]);
}
}
return strBuilder.toString();
}
}
答案 6 :(得分:2)
使用replaceAll而不是替换
GetCapabilities
这应该给你想要的答案。
答案 7 :(得分:1)
这是一个lambda函数,可删除所有以字符串形式传递的字符
BiFunction<String,String,String> deleteChars = (fromString, chars) -> {
StringBuilder buf = new StringBuilder( fromString );
IntStream.range( 0, buf.length() ).forEach( i -> {
while( i < buf.length() && chars.indexOf( buf.charAt( i ) ) >= 0 )
buf.deleteCharAt( i );
} );
return( buf.toString() );
};
String str = "TextX XYto modifyZ";
deleteChars.apply( str, "XYZ" ); // –> "Text to modify"
答案 8 :(得分:0)
package com.acn.demo.action;
public class RemoveCharFromString {
static String input = "";
public static void main(String[] args) {
input = "abadbbeb34erterb";
char token = 'b';
removeChar(token);
}
private static void removeChar(char token) {
// TODO Auto-generated method stub
System.out.println(input);
for (int i=0;i<input.length();i++) {
if (input.charAt(i) == token) {
input = input.replace(input.charAt(i), ' ');
System.out.println("MATCH FOUND");
}
input = input.replaceAll(" ", "");
System.out.println(input);
}
}
}
答案 9 :(得分:0)
通过性能基准评估主要答案,这证实了人们对当前选择的答案使幕后正则表达式操作昂贵的担忧
到目前为止,提供的答案有3种主要样式(忽略JavaScript答案;)):
就代码大小而言,显然String.replace是最简洁的。简单的Java实现比Lambda稍微更小,更干净(IMHO)(请不要误解-我经常在合适的地方使用Lambda)
执行速度从快到慢依次为:简单的Java实现,Lambda,然后是String.replace()(调用正则表达式)。
到目前为止,最快的实现是对简单的Java实现进行了调整,以便它可以将StringBuilder缓冲区预分配为最大可能的结果长度,然后仅将不在“要删除的字符”字符串中的字符追加到缓冲区中。这样可以避免在长度大于16个字符的字符串中发生任何重新分配(StringBuilder的默认分配),并且避免了从Lambda实现中删除字符串副本中的字符而导致的“向左滑动”性能冲击。
下面的代码运行一个简单的基准测试,每个实现运行1,000,000次并记录经过的时间。
确切的结果随每次运行而有所不同,但是性能的顺序永远不会改变:
Start simple Java implementation
Time: 157 ms
Start Lambda implementation
Time: 253 ms
Start String.replace implementation
Time: 634 ms
Lambda实现(从Kaplan的答案复制而来)可能会更慢,因为它对所有要删除的字符执行“所有字符左移一”的操作。对于较长的带有很多字符需要删除的字符串,这显然会变得更糟。 Lambda实现本身也可能会产生一些开销。
String.replace实现,使用正则表达式,并在每次调用时进行正则表达式“编译”。对此的一种优化是直接使用regex并缓存已编译的模式,以避免每次编译它的开销。
package com.sample;
import java.util.function.BiFunction;
import java.util.stream.IntStream;
public class Main {
static public String deleteCharsSimple(String fromString, String charsToDelete)
{
StringBuilder buf = new StringBuilder(fromString.length()); // Preallocate to max possible result length
for(int i = 0; i < fromString.length(); i++)
if (charsToDelete.indexOf(fromString.charAt(i)) < 0)
buf.append(fromString.charAt(i)); // char not in chars to delete so add it
return buf.toString();
}
static public String deleteCharsLambda(String fromString1, String charsToDelete)
{
BiFunction<String, String, String> deleteChars = (fromString, chars) -> {
StringBuilder buf = new StringBuilder(fromString);
IntStream.range(0, buf.length()).forEach(i -> {
while (i < buf.length() && chars.indexOf(buf.charAt(i)) >= 0)
buf.deleteCharAt(i);
});
return (buf.toString());
};
return deleteChars.apply(fromString1, charsToDelete);
}
static public String deleteCharsReplace(String fromString, String charsToDelete)
{
return fromString.replace(charsToDelete, "");
}
public static void main(String[] args)
{
String str = "XXXTextX XXto modifyX";
String charsToDelete = "X"; // Should only be one char as per OP's requirement
long start, end;
System.out.println("Start simple");
start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++)
deleteCharsSimple(str, charsToDelete);
end = System.currentTimeMillis();
System.out.println("Time: " + (end - start));
System.out.println("Start lambda");
start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++)
deleteCharsLambda(str, charsToDelete);
end = System.currentTimeMillis();
System.out.println("Time: " + (end - start));
System.out.println("Start replace");
start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++)
deleteCharsReplace(str, charsToDelete);
end = System.currentTimeMillis();
System.out.println("Time: " + (end - start));
}
}
答案 10 :(得分:0)
在替换期间,您需要将需要删除的字符放在方括号内。示例代码如下:
String s = "$116.42".replaceAll("[$]", "");
答案 11 :(得分:0)
...另一个lambda
从原始副本中复制新字符串,但忽略要删除的字符
String text = "removing a special character from a string";
int delete = 'e';
int[] arr = text.codePoints().filter( c -> c != delete ).toArray();
String rslt = new String( arr, 0, arr.length );
给出:rmoving a spcial charactr from a string
答案 12 :(得分:-3)
你可以使用前面提到的str = str.replace("X", "");
,你会没事的。对于您的信息''
不是空(或有效)字符,但'\0'
是。
所以你可以改用str = str.replace('X', '\0');
。