2011-11-09 13 views
8

Czy Java String obsługuje indeks górny w ciągu znaków? Jeśli tak, to jak mogę go użyć, przeszukałem internet, a także API, ale nie jestem w stanie określić, w jaki sposób mogę go użyć do mojego celu.superscript w Java String

Mimo że zostanie wydrukowany na stronie internetowej, nie mogę użyć html tutaj, wszelkie sugestie proszę

+1

Java String jest po prostu zbiorem znaków, czyli zwykłego tekstu .. –

+0

... Cóż. Jeśli chcesz indeksów górnych w przeglądarce, będziesz musiał użyć CSS lub HTML. Ciąg jest po prostu ciągiem, nie ma żadnego wewnętrznego formatowania. –

+1

Nie wiem, dlaczego wszyscy mówią o elementach graficznych i czcionkach. OP, proszę wyjaśnić swoje pytanie: gdzie i jak będzie wyświetlany ten ciąg? –

Odpowiedz

16

Sprawdź java.text.AttributedString, który obsługuje indeksy i więcej. na przykład, w swojej paintComponent() można przejść:

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

+0

co z tym http://stackoverflow.com/questions/12208275/output-a-number-raised-to-a-power-as-a-tring? – partho

5

Nie, ciąg jest po prostu sekwencją jednostek kodowych UTF-16. Istnieją kodowane kody Unicode dla individual super-script characters w stronach kodowych matematyki, ale żadne nie oznaczają regionu łańcucha jako super-skryptu tak jak w przypadku regionów bidi.

Jeśli próbujesz wyświetlić tekst matematyczny za pomocą super-skryptów w kontekście graficznym, powinieneś wyszukać biblioteki Latek lub MathML napisane w Javie.

2

Ciąg nie przechowuje informacji o formatowaniu. Aby użyć superskryptu, będziesz musiał bawić się czcionką komponentu wyświetlającego. Zamówienie na API on Font.

0

Można to zrobić w ciągach Java oraz niektórych innych przypadkach także z wykorzystaniem super-skrypt Unicode ... spojrzeć na ten link.

2

Można używać znaczników HTML w Javie (User Interface tylko): Załóżmy, że chcesz wyświetlać 2 , napisać ten kod w swoim JLabel:

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

wszelki wypadek ktoś używa theese ręcznie robione funkcje:

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

uwaga, że ​​jest tam trochę niejednoznaczności o ¹²³, ponieważ są one ACII symobls 251, 253 i 252 i są one również UTF-symbole. Wolę używać acsii, ponieważ prawdopodobnie są one wspierane czcionką, ale tutaj powinieneś opisać to, czego chcesz używać.

+0

Nie ma czegoś takiego jak symbol UTF, a kodowaty 251-253 w Unicode to "ûüý". Również twój indeks dolny "5" jest w rzeczywistości indeksem górnym. –

+0

1. symbol obsługiwany w UTF-8 jest utf-symbol 2. dzięki, poprawione – AvrDragon

+1

UTF-8 oraz UTF-16 i UTF-32 nie są zestawami symboli. Są to odwzorowania od ciągów bajtów do ciągów liczb całkowitych o różnych rozmiarach. Unicode i ASCII to odwzorowania od liczb całkowitych do symboli, więc są symbole ASCII i symbole Unicode, ale nie symbole UTF- *, tylko UTF-?? kodowanie symboli Unicode/ASCII. Jak widać, jedynymi symbolami numerycznymi w [rozszerzonym ASCII] (http://www.ascii-code.com/) są regularne cyfry i ułamki. Brak indeksów górnych ani dolnych. –

1

Oto przykład w jaki sposób przewinąć w indeks łańcuch "JavaTM" w Javie.

w as1.addAttribute method „4” jest beginIndex indeks pierwszego znaku i „6” jest endIndex indeks znaku dla indeksu górnego.

Przykład:

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

}

Wyjście z tego programu:

enter image description here