Я создаю JTextField, который мгновенно меняет знак подчеркивания, за которым сразу следует число, до нижнего индекса. Мне нужна помощь с кодом регулярного выражения с заменой. Я немного читал о группах регулярных выражений, но я не совсем понимаю, как получить номер после подчеркивания в этом случае.Использование replaceAll для индексов
Подстрочный код:
// Only 0 - 9 for now...
private String getSubscript(int number)
{
String[] sub = {"\u2080", "\u2081","\u2082","\u2083","\u2084","\u2085","\u2086","\u2087","\u2088","\u2089" };
return sub[number];
}
Вставить код Обновление:
public void insertUpdate(DocumentEvent e) {
if (textField.getText().contains("_"))
{
SwingUtilities.invokeLater(this);
}
}
Если фактический заменить идет (так как вы не можете напрямую изменить текстовое поле в методе DocumentListener:
public void run()
{
textField.setText(textField.getText().replaceAll("_([0-9])+", getSubscript(Integer.getInteger("$1"))));
}
Это генерирует исключение NullPointer в методе run().
Edit:
Вот пример вывода:
Типы пользователей "H_2" и это сразу становится "H₂", то он по-прежнему "H₂O_2", который сразу становится "перекиси водорода"
Я думаю, что подчеркивание символ должен быть экранирован в регулярном выражении: '\\ _' (только в 'replaceAll()', но не в 'содержит()') – Stephan