通过在索引处插入来操作String

时间:2012-03-06 12:14:08

标签: java string

我有一个字符串:

C6H14

我想要的是:

C<sub>6</sub>H<sub>14</sub>

所以基本上我想在数字之前添加<sub>,在数字之后添加</sub>。我怎么能做到这一点?请记住,String可以无限长:

X4Y6Z10W4T12

6 个答案:

答案 0 :(得分:5)

我不是java专家,但我很确定,你可以使用正则表达式替换函数,其中的模式将是:

(\d+)

和替换字符串将是:

<sub>$1</sub>

抱歉,我不是100%肯定java语法,但它可能是这样的:

str = str.replaceAll("(\\d+)", "<sub>$1</sub>");

此方法已在Java 5中添加

这里有一些关于java中regexp的更多信息:

http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

http://www.regular-expressions.info/java.html

http://javamex.com/tutorials/regular_expressions/search_replace.shtml

答案 1 :(得分:2)

我会使用Matcher

StringBuffer sb = new StringBuffer();
Matcher m = Pattern.compile("\\d+").matcher(input);
while(m.find()) {
    m.appendReplacement(sb,"<sub>$0</sub>");
}
m.appendTail(sb);
String newString = sb.toString();

答案 2 :(得分:1)

您需要为此构造一个新的String对象 - 无法更改字符串&#34;就位#34; (字符串是不可变的)

String.replaceAll会为你做这件事。

str = str.replaceAll( "\\d+", "<sub>$0</sub>" );

就是你需要的一切

答案 3 :(得分:0)

java.util.String在Java中是不可变的,因此您需要构建一个新的String实例。您必须解析原始字符串(例如使用正则表达式)。 StringBuilder是一个很好的实用工具。

答案 4 :(得分:0)

使用Matcher和Pattern类搜索模式: "\\d+"

之后,找到开始和结束索引并添加<sub>和''

答案 5 :(得分:0)

字符串是不可变的,因此我们无法在现有字符串中插入子标记。所以你需要一个创建一个新字符串的方法。您可以使用正则表达式,或使用字符串构建器生成如下所示的新字符串:

public String parseString(String input) {
        StringBuilder builder = new StringBuilder();
        String format = "<sub>%c</sub>";
        for(char c:input.toCharArray()) {
            if (Character.isDigit(c)) {
                builder.append(String.format(format, c));
            } else {
                builder.append(c);
            }
        }
        return builder.toString();
    }