Java String中的上标

时间:2011-11-09 00:01:51

标签: java

Java String是否支持字符串中的上标?如果是,那么我如何使用它,我已经搜索了网络和API,但无法弄清楚如何将它用于我的目的

虽然这会打印在网页上,但我不能在这里使用html标签,请提出任何建议

7 个答案:

答案 0 :(得分:19)

查看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

答案 1 :(得分:14)

以防万一有人使用theese手工制作的功能:

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;
}

请注意,对于³³3有一点含糊之处,因为它们是acii symobls 251,253和252,它们也是utf符号。我更喜欢使用acsii,因为它们更可能是由字体支持的,但在这里你应该确定你真正想要使用的东西。

答案 2 :(得分:5)

不,字符串只是一系列UTF-16代码单元。数学代码页中有individual super-script characters的unicode代码点,但没有一个代码点将字符串区域标记为bidi区域的超级脚本。

如果您尝试使用Graphics上下文使用超级脚本显示数学文本,则应搜索用Java编写的Latek或MathML库。

答案 3 :(得分:2)

String不存储格式信息。要使用上标,您必须摆弄显示组件的字体。查看API on Font

答案 4 :(得分:2)

您可以在java中使用html标签(仅限用户界面): 假设您要显示2 10 ,请在JLabel中编写此代码:

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

答案 5 :(得分:1)

这可以在java字符串中完成,其他一些情况也可以使用Unicode Character超级脚本...看看link

答案 6 :(得分:1)

以下是如何在Java中标记字符串“JavaTM”的示例。

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