Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用正则表达式将字符串中的字母替换为ASCII表示形式_Java_Regex - Fatal编程技术网

Java 使用正则表达式将字符串中的字母替换为ASCII表示形式

Java 使用正则表达式将字符串中的字母替换为ASCII表示形式,java,regex,Java,Regex,有没有办法使用正则表达式将数字字符串中的所有字母替换为ASCII数字 e、 g 应成为: 1297345986 编辑: 谢谢你友好而有益的回应。一个简单的“不”是不可能的,你想要的方式对我来说已经足够了。相反,我收到的教诲让我后悔曾经发布过这个问题。我没有扩展我的知识,反而感到困惑和沮丧。 再次感谢 如果您真的在寻找基于正则表达式的解决方案,那么以下代码应该适合您: String str = "12a345b6"; Pattern p = Pattern.compile("(?i)([a-z]

有没有办法使用正则表达式将数字字符串中的所有字母替换为ASCII数字

e、 g

应成为:

1297345986
编辑: 谢谢你友好而有益的回应。一个简单的“不”是不可能的,你想要的方式对我来说已经足够了。相反,我收到的教诲让我后悔曾经发布过这个问题。我没有扩展我的知识,反而感到困惑和沮丧。
再次感谢

如果您真的在寻找基于正则表达式的解决方案,那么以下代码应该适合您:

String str = "12a345b6";
Pattern p = Pattern.compile("(?i)([a-z])");
Matcher m = p.matcher(str);
StringBuffer buf = new StringBuffer();
while (m.find()) {
   m.appendReplacement(buf, "" + (int) m.group(1).charAt(0));
}
m.appendTail(buf);
System.out.printf("After: %s%n", buf);
输出:
在问题的任何部分,都不需要使用正则表达式。您只需获取每个字符,并将其转换为ASCII码,如果它是字母表,则保持原样。 StringBuilder在这里很有用

以下是您需要做的:

String str = "12a345b6";    
StringBuilder builder = new StringBuilder();

for (char ch: str.toCharArray()) {
    builder.append(Character.isDigit(ch) ? ch : String.valueOf((int)ch));
}

System.out.println(builder.toString());
请注意,在int类型转换周围使用String.valueOf是必要的,以避免字符ch升级为int。这如中所述:

否则,如果第二个和第三个操作数的类型为 将§5.1.8转换为数字类型,则有几种情况:

否则,二进制数字提升§5.6.2将应用于操作数类型,条件表达式的类型为 第二个和第三个操作数的升级类型。
因此,如果您不将int转换为字符串,那么根据上面的语句,第二个参数-ch将被提升为int,从而为1添加ASCII码,而不是字符“1”本身。

您尝试过什么吗?你有什么问题?为什么是正则表达式?不管怎样,你试过什么?我不确定regex是否能做到这一点,但它应该足够简单,只需在字符串上进行简单的迭代。regex是解决这个问题的最不合适的解决方案。我不确定投赞成票还是反对票。正则表达式的用途是查找字母表,而不是替换它们。@Prasanth:是的,正则表达式就是这样做的。替换方法是生成等价的ascii代码,而正则表达式当然无法处理。
After: 1297345986
String str = "12a345b6";    
StringBuilder builder = new StringBuilder();

for (char ch: str.toCharArray()) {
    builder.append(Character.isDigit(ch) ? ch : String.valueOf((int)ch));
}

System.out.println(builder.toString());