举一个在regex java中使用cyirillic的例子

use*_*641 5 java regex string

如何制作一个cyrillic字符串的正则表达式,我想以某种方式使用它:

String.replaceAll("?????????","")

当然它不起作用.我该怎么办才能让它发挥作用?

好的,我看到该方法有效,但它对我不起作用.我如何检查,为什么方法不执行?

...

嗯,我试着使用s1 = s1.replaceAll("[\\p{InCyrillic}]", "");我通过套接字的字符串.它的效果很好,所有的西里尔字母都消失了,包括这个词"???????",但是如果我尝试 s1=s1.replaceAll("???????","")什么也没发生.

但是s1=s1.replaceAll("???????","")对于在此程序中定义的静态字符串,方法在同一程序中工作.我想这个问题可能是因为错误的字符集,但我仍然无法理解我做错了什么.字符串的字符集是windows-1251.我尝试在程序中使用charset进行实验(现在是jsp),使用方法

System.setProperty("file.encoding", "windows-1251");
response.setCharacterEncoding("windows-1251"); 
Run Code Online (Sandbox Code Playgroud)

尝试将字符串从一个字符集转换为另一个字符集.没有任何改变

Zha*_*dos 5

如果您在@Henry 的回答中显示您的结果可能会更清楚。我想是字符或编码的问题。要识别西里尔文中的字符串,您可以使用以下代码:

String s1 = "???a???";
s1 = s1.replaceAll("[\\p{InCyrillic}]", "");
System.out.println(s1);
Run Code Online (Sandbox Code Playgroud)

该代码将删除所有西里尔字符,您可以识别无效的编码字符。

如果您的结果类似于“a”或“e”或“ae”,这意味着您的字符串中存在类似于西里尔字母的拉丁字符,因此您应该使用此正则表达式替换

 s1 = s1.replaceAll("???[aa]?[ee]?", "");
Run Code Online (Sandbox Code Playgroud)

其中 [a- 是西里尔字母,a- 是拉丁字符] 等等。

如果您的结果是“???a???”,则是编码问题,希望此链接对您有所帮助

如何确定字符串是否包含无效的编码字符


Hen*_*nry 1

刚刚尝试过这个:

\n\n
String s1 = "\xd0\x92\xd0\xb2\xd0\xb5\xd0\xb4\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xb2 \xd1\x81\xd0\xbf\xd0\xb5\xd1\x86\xd0\xb8\xd0\xb0\xd0\xbb\xd1\x8c\xd0\xbd\xd0\xbe\xd1\x81\xd1\x82\xd1\x8c (\xd0\x91.3.2.1-\xd0\x9f\xd0\xb8\xd0\x9a\xd0\x9e)60,3\xd0\xad\xd0\xba\xd0\xb7\xd0\xb0\xd0\xbc\xd0\xb5\xd0\xbd";\nString s2 = s1.replaceAll("\xd0\xad\xd0\xba\xd0\xb7\xd0\xb0\xd0\xbc\xd0\xb5\xd0\xbd", "");\nSystem.out.println(s2);\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出是:

\n\n
\xd0\x92\xd0\xb2\xd0\xb5\xd0\xb4\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xb2 \xd1\x81\xd0\xbf\xd0\xb5\xd1\x86\xd0\xb8\xd0\xb0\xd0\xbb\xd1\x8c\xd0\xbd\xd0\xbe\xd1\x81\xd1\x82\xd1\x8c (\xd0\x91.3.2.1-\xd0\x9f\xd0\xb8\xd0\x9a\xd0\x9e)60,3\n
Run Code Online (Sandbox Code Playgroud)\n