2016-04-16 10 views
1

私はできるだけ効率的な方法で文字列から文字のセットを削除したい。文字列から大量の文字を削除する簡単な方法はありますか?

今、私はちょうど1つのコード行をコピーして貼り付けますが、より効率的な方法が必要です。

マイコード:

ProductName = ProductName.replace("!", ""); 
ProductName = ProductName.replace("#", ""); 
ProductName = ProductName.replace("$", ""); 
ProductName = ProductName.replace("%", ""); 
ProductName = ProductName.replace("^", ""); 
ProductName = ProductName.replace("&", ""); 
ProductName = ProductName.replace("*", ""); 
ProductName = ProductName.replace("(", ""); 
ProductName = ProductName.replace(")", ""); 
ProductName = ProductName.replace("?", ""); 
ProductName = ProductName.replace("[", ""); 
ProductName = ProductName.replace("{", ""); 
ProductName = ProductName.replace("}", ""); 
ProductName = ProductName.replace("]", ""); 
ProductName = ProductName.replace("/", ""); 
ProductName = ProductName.replace(".", ""); 
ProductName = ProductName.replace("<", ""); 
ProductName = ProductName.replace(">", ""); 
ProductName = ProductName.replace(",", ""); 
+2

もっと効率的です=コード行数が少ない... forループを使用できます。または正規表現。または... – Tunaki

+0

コード行が少なくてすむようにするには、正規表現を使用します。変数名は小文字で始めるのが慣習であることに注意してください。 – martijnn2008

+0

@Tunaki true、しかしこの場合はおそらくこれを行うにはより良い方法でしょう –

答えて

2

は物事をovercomplicateしないでください。今のところ、効率よりも維持しやすい方法に集中しようとする。それは正規表現とそのcharacter classを使用している可能性行うに

一つの方法 - 例えば[abc]ようregexでabcのいずれかである1つの文字を表します。

一部の文字が(a-z、または単に文字クラスの終了を表し]のような文字の範囲を作成するために使用することができる-のような)も、文字クラスの中で特別な意味を持っているので、あなたはここに注意する必要があります。
このような特殊文字の問題を避けるために、alll文字をリテラル(特別な意味を持たない文字)として扱うべき領域を作成することができます。このような領域を作成するには、\Q...\Eを使用してください(詳細については、http://www.regular-expressions.info/characters.html#specialセクションの最後の段落を参照してください)。

だからあなたのコードは、JavaがあなたのProductNameproductNameでなければならないので、小文字で始まる必要大会変数の命名によるとまた

String removeThese = "!#$%^&*()?[{}]/.<>,"; 
ProductName = ProductName.replaceAll("[\\Q"+removeThese +"\\E]", ""); 

ようになります。これが解決策になることができ

productName = productName.replace("!", "") 
    .replace("#", "") 
    .replace("$", "") 
    .replace("%", "") 
    .replace("^", "") 
    .replace("&", "") 
    .replace("*", "") 
    .replace("(", "") 
    .replace(")", "") 
    .replace("?", "") 
    .replace("[", "") 
    .replace("{", "") 
    .replace("}", "") 
    .replace("]", "") 
    .replace("/", "") 
    .replace(".", "") 
    .replace("<", "") 
    .replace(">", "") 
    .replace(",", ""); 
0

はまた、あなたがこのような呼び出しをチェーンできることに注意してください。

public class ReplaceDemo { 
public static void main(String[] args) { 

    String[] symbols = {"!", "#", "$","%","^","&","*","?","[", "]", "{", "}", "(", ")", "/", ".", "<",">", ",", }; 
    String ProductName; 

    for (int i = 0; i<symbols.length ;i++) { 

     ProductName = ProductName.replace(symbols[i], ""); 
    } 
}} 
0

関連する問題