Управлять строкой, вставляя в индекс - PullRequest
2 голосов
/ 06 марта 2012

У меня есть строка:

C6H14

То, что я хочу, это:

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

Так что в основном я хочу добавить <sub> перед числом и </sub>после номера.Как я могу сделать это?Имейте в виду, что строка может быть бесконечно длинной:

X4Y6Z10W4T12

Ответы [ 6 ]

5 голосов
/ 06 марта 2012

Я не эксперт по Java, но я почти уверен, что вы можете использовать функцию замены регулярных выражений, где шаблон будет:

(\d+)

, а строка замены будет:

<sub>$1</sub>

Извините, я не на 100% уверен в синтаксисе Java, но это может быть что-то вроде:

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

Этот метод был добавлен в Java 5

здесьнемного больше информации о регулярном выражении в Java:

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

2 голосов
/ 06 марта 2012

Я бы использовал 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();
1 голос
/ 06 марта 2012

Для этого вам нужно будет создать новый объект String - невозможно изменить строку «на месте» (строки неизменны)

String.replaceAll сделает это за вас.

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

все, что вам нужно

0 голосов
/ 06 марта 2012

Строка является неизменной, поэтому мы не можем вставить вложенные теги в существующую строку. Таким образом, вам нужен метод, который создает новую строку. Вы можете использовать регулярное выражение или использовать построитель строк для генерации новой строки, например:

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();
    }
0 голосов
/ 06 марта 2012

Используйте классы Matcher и Pattern с поиском шаблона: "\\d+"

После этого найдите начальный и конечный индексы и добавьте <sub> и ''

0 голосов
/ 06 марта 2012

java.util.String s являются неизменными в Java, поэтому вам нужно создать новый экземпляр String.Вы должны проанализировать исходную строку (например, используя регулярные выражения) для этого. StringBuilder - хорошая утилита для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...