Надстрочный индекс в строке Java

Поддерживает ли Java String надстрочный индекс в String? Если да, то как я могу его использовать, я искал в Интернете, а также API, но не смог понять, как я могу использовать его для своей цели.

Хотя это будет напечатано на веб-странице, я не могу использовать html-тег здесь, любые предложения, пожалуйста,

Ответ 1

Проверьте java.text.AttributedString, который поддерживает индексы и многое другое. например, в вашем paintComponent() вы можете пойти:

   public void paintComponent(Graphics g) {
      super.paintComponent(g);
      AttributedString as = new AttributedString("I love you 104 gazillion");
      as.addAttribute(TextAttribute.SUPERSCRIPT, TextAttribute.SUPERSCRIPT_SUPER, 13, 14);
      as.addAttribute(TextAttribute.FOREGROUND, Color.RED, 2, 6);
      g.drawString(as.getIterator(), 20, 20);
   }

Should look like this

Ответ 2

На всякий случай, если кто-то использует эти функции, сделанные вручную:

public static String superscript(String str) {
    str = str.replaceAll("0", "⁰");
    str = str.replaceAll("1", "¹");
    str = str.replaceAll("2", "²");
    str = str.replaceAll("3", "³");
    str = str.replaceAll("4", "⁴");
    str = str.replaceAll("5", "⁵");
    str = str.replaceAll("6", "⁶");
    str = str.replaceAll("7", "⁷");
    str = str.replaceAll("8", "⁸");
    str = str.replaceAll("9", "⁹");         
    return str;
}

public static String subscript(String str) {
    str = str.replaceAll("0", "₀");
    str = str.replaceAll("1", "₁");
    str = str.replaceAll("2", "₂");
    str = str.replaceAll("3", "₃");
    str = str.replaceAll("4", "₄");
    str = str.replaceAll("5", "₅");
    str = str.replaceAll("6", "₆");
    str = str.replaceAll("7", "₇");
    str = str.replaceAll("8", "₈");
    str = str.replaceAll("9", "₉");
    return str;
}

Обратите внимание, что существует некоторая двусмысленность в отношении ¹²³, поскольку они являются символами acii 251, 253 и 252 и также являются символами utf. Я предпочитаю использовать acsii, потому что они, скорее всего, поддерживаются шрифтом, но здесь вы должны решить, что вы действительно хотите использовать.

Ответ 3

Нет, строка - это просто последовательность кодовых единиц UTF-16. В математических кодовых страницах есть кодовые точки Юникода для отдельных символов суперскриптов, но ни одна из них не помечает область строки как суперскрипт, как для областей двунаправленного текста.

Если вы пытаетесь отобразить математический текст с помощью суперскриптов, используя контекст Graphics, вам следует искать библиотеки Latek или MathML, написанные на Java.

Ответ 4

Строка не сохраняет информацию о форматировании. Чтобы использовать надстрочный указатель, вам придется возиться со шрифтом компонента отображения. Оформить API на шрифте.

Ответ 5

Вы можете использовать теги html в java (только для пользовательского интерфейса): Предположим, вы хотите отобразить 2 10 напишите этот код в JLabel:

JLabel lab = JLabel("2<html><sup>10</sup></html>");

Ответ 6

Это можно сделать в java-строках, а в некоторых других случаях также использовать символ Unicode super script... посмотрите на ссылку ./p >

Ответ 7

Вот пример того, как надстроить строку JavaTM в Java.

in as1.addAttribute method '4' - это индекс beginIndex первого символа, а "6" - индекс endIndex для надстрочного символа.

Пример:

public class TextAttributesSuperscript extends JPanel {
public void paint(Graphics g) {
    Graphics2D g2d = (Graphics2D) g;
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

    AttributedString as1 = new AttributedString("JavaTM");
    as1.addAttribute(TextAttribute.SUPERSCRIPT, TextAttribute.SUPERSCRIPT_SUPER, 4, 6);
    g2d.drawString(as1.getIterator(), 15, 60);
}

public static void main(String[] args) {
    JFrame frame = new JFrame("Java Superscript Example");
    frame.add(new TextAttributesSuperscript());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.setSize(320, 190);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}

}

Вывод этой программы:

enter image description here