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