2
4

10 に答える 10

8

これは、「文字列に ASCII (0-127) 文字のみを保持しようとしている場合」に機能するはずです。

String str = "This is sample CCNA program. it contains CCNP™";
str = str.replaceAll("[^\\x00-\\x7f]+", "");
于 2013-08-01T09:17:04.173 に答える
1
 ^[\\u0000-\\u007F]*$

これにより、ASCCI 文字のみが許可されますが、特殊文字とは何かを指定する必要があります。

于 2013-08-01T09:12:56.147 に答える
0

次のようなものを試すこともできます。

Normalizer.decompose(str, false, 0).replaceAll("\\p{InSuperscriptsAndSubscripts}+", "");

ただし、適切な Unicode グループまたはグループ ( Unicode Blocks )を見つける必要があります。

于 2013-08-01T09:24:15.983 に答える
0

128 を超える文字の削除に関する上記の回答は非常に役に立ちました。ありがとうございました。

ただし、2 つの不正な文字が連続したり、文字列の末尾に不正な文字がある場合など、一部の状況はカバーされませんでした。タブと改行を除くすべての特殊文字を削除する変更を次に示します。

  // Remove all special characters except tab and linefeed
  public static String cleanTextBoxData(String value) {
    if (value != null) {
    int beforeLen = value.length();
       for (int i = 0; i < value.length(); i++) {
         if ( ((value.charAt(i)<32) || (value.charAt(i)>126)) &&
            ((value.charAt(i)!=9) && (value.charAt(i)!=10)) ) {
           if ((value.charAt(i)<32) || (value.charAt(i)>126)) {
             if (i==value.length()-1) {
               value = value.substring(0,i);
             } else {
            value = value.substring(0,i) + value.substring(i+1);
            i--;
             }
        }
           if (i == value.length()) {
             break;
           }
         }
       }
       int dif = beforeLen - value.length();
       if (dif > 0) {
         logger.warn("Found and removed {} bad characters from text box.", dif);
       }

    }
      return value;
  }
于 2014-06-19T18:56:31.017 に答える
0

インスタンスに含まれる特殊文字を実際に定義する必要があります。

RegEx のファンでない場合は、Characterクラスのメソッドを使用することを検討できます。以下のサンプルを参照してください。

public class Test {

    public static void main(String[] args) {

        String test = "This is sample CCNA program. it contains CCNP™";

        System.out.println("Character\tAlpha or Letter\tWhitespace");

        for (char c : test.toCharArray()) {
            System.out.println(
                    c + "\t\t"
                    + Character.isLetterOrDigit(c) + "\t\t" 
                    + Character.isWhitespace(c));
        }
    }
}

上記の方法以外にも使用できる方法があります。Characterクラス APIを見てください。

于 2013-08-01T09:31:26.543 に答える
0
       String  yourString = "This is sample CCNA program. it contains CCNP™";
       String result = yourString.replaceAll("[\\™]","");       
       System.out.println(yourString);
       System.out.println(result);
于 2013-08-01T09:22:07.770 に答える
0

128 を超える文字を除外する正規表現の代替オプション。

    String s = "This is sample CCNA program. it contains CCNP™";


    for (int i = 0; i < s.length(); i++) {
        if (s.charAt(i) > 128) {
            s = s.substring(0,  i) 
                    + s.substring(i + 1);
            i++;
        }
    }
于 2013-08-01T11:28:56.530 に答える
0
import java.util.Scanner;

public class replacespecialchar {

    /**
     * @param args
     */
    public static void main(String[] args) {

        String before="";

        String after="";
        Scanner in =new Scanner(System.in);
        System.out.println("enter string with special char");
        before=in.nextLine();

         for (int i=0;i<before.length();i++)
          {
              if (before.charAt(i)>=65&&before.charAt(i)<=90 || before.charAt(i)>=97&&before.charAt(i)<=122)  
              {
                    after+=before.charAt(i);
              }
          }

        System.out.println("String with special char "+before);
        System.out.println("String without special char "+after);
    }
}
于 2014-03-07T20:05:11.777 に答える