简体   繁体   中英

How do I remove some characters from my String

i want to remove all of the following chars from my string

">[],-"

at the moment im doing this. but there must be a more efficient way

newString = myString.replace(">","").replace("[","").replace("]","")....

Use a regex that describes all the characters you want to replace, with the method that replaces everything matching the regex:

newString = myString.replaceAll("[<>\\[\\],-]", "");

(edited: I don't think <> are supposed to be escaped, actually. And I forgot to double up the backslashes since they'll be interpreted twice: once by the Java compiler, and again by the regular expression engine.)

You can use the replaceAll method of the String class.

You can form a character class consisting of the characters you want to delete. And the replacement string will be empty string "" .

But the characters you want to delete which you'll be putting in the character class might be regex meta-characters and hence need to be escaped. You can manually escape them as many answers show, alternatively you can use the Pattern.quote() method.

String charToDel = ">[],-";
String pat = "[" + Pattern.quote(charToDel) + "]";
String str = "a>b[c]d,e-f";
str = str.replaceAll(pat,"");

See it

More efficient performace-wise: yes. You can't "delete" chars from a String so you have t create a new one anyway. Consider a switch/case based solution:

StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
  switch(s.getCharAt(i)) {
    case '>':
    case '[':
    case ']':
    case ',':
    case '-': break;
    default: sb.append(s.getCharAt(i));
  }
}
s = sb.toString();

Using the replace / replaceAll methods causes a new Pattern to be compiled each time. So if you are doing this multiple times I would strongly suggest either looping through the characters or creating a single regular expression to use repeatedly.

newString = myString.replaceAll("[>\\[\\],-]", "");

反斜杠是为了转义“[”,因为第一个参数实际上是一个正则表达式。

newString = myString.replaceAll("[>\\[\\],-]", "");

You could loop through each character, appending them one by one to a StringBuilder() unless they match one of the characters you are removing.

But I'm not sure that'd be a whole lot faster.

use regex; the string relaceAll method takes the reegex as first argument and the replacement text as second argument; for example

return myString.replaceAll(">|\\[|\\]|,|-";, "");

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM