2016-05-11 7 views
0

Ich bin ein Beispiel enter link description here, aber ich habe eine kleine Verwirrung. Was bedeutet die folgende Zeile?Was bedeutet es, ein Zeichen von einem Zeichen zu subtrahieren

int charPos = word.charAt(0) - 'a'; 

Was bedeutet es eigentlich, einen Buchstaben von einem char zu subtrahieren? Ich frage mich, ob Sie auf diese Weise die Position des Char im Alphabet erhalten.

+0

da Sie downvoted, könnten Sie mir sagen, welches Board ich kann, um Hilfe mit dieser Coding Frage zu bekommen? – j2emanue

Antwort

1

Es gibt Ihnen die Position relativ zum Zeichen a in der Zeichentabelle (ASCII). Wenn das Eingabe-Zeichen ein Kleinbuchstabe ist, ist dies auch die Position im Alphabet (Nullindex basiert).

Beispiel:

'Z' - 'a' gibt Ihnen 90 - 97 = -7

'b' - 'a' Sie 98 - 97 = 1

1

gibt 'a' in der ASCII-Tabelle 97 ist, 'b' - 'a' entsprechen würde zu 98-97 , was zu 1 führt, das ist bs Position in der alphabetischen Reihe (ein Wesen 0)

0

Die anderen Antworten sind in der Theorie korrekt, aber der Verweis auf ASCII ist einfach falsch.

In Java gibt charAt eine Unicode/UTF-16-Codeeinheit zurück. UTF-16 kodiert einige Unicode-Codepunkte in einer Code-Einheit; einige in zwei. Wenn sich Ihre Daten in den Bereichen von Codepunkten befinden, die UTF-16 in einer Codeeinheit codiert, ist die Subtraktion die "Entfernung" zwischen diesen Codepunkten. Wenn die Codepunkte in einem Bereich liegen, in dem es eine "sinnvolle" Reihenfolge gibt, ist die Entfernung sinnvoll.

Zum Beispiel sind die Basic Latin Kleinbuchstaben in der Reihenfolge des englischen Alphabets und UTF-16 codiert sie in einer Code-Einheit. Die Entfernung würde entlang einer "Alphabetlinie" statt einer "Nummernlinie" liegen. Dies funktioniert für Englisch und einige andere Alphabete, aber nicht für viele andere.

Außerdem würde die Subtraktion von 'a' 'a' auf 0, 'b' auf 1, 'z' auf 25, ... abbilden. Was ist nach 'z'? Nun, vielleicht sollten Sie diesen Code nicht auf solche Daten anwenden. Selbst wenn Ihr Text nur englische Wörter in Kleinbuchstaben enthält, ist der Algorithmus nicht in der Lage, die englischen Wörter "naiv" oder "resume" zu verarbeiten.

BTW-Es gibt etwa 120.000 "Buchstaben" in Unicode aus Dutzenden von Schriftsystemen (Skripten), die von vielen Dutzenden von Sprachen verwendet werden, jeweils mit dem, was ein gelernter Körper als Alphabet bezeichnet.

+0

"einfach falsch"? ASCII ist eine Untermenge von Unicode. – Adrian

+0

@adjan Nur in dem Sinne, dass Unicode alle Zeichen hat, die ASCII hat. Wenn Sie mit Text arbeiten, existiert Text in genau einer Kodierung und in diesem Fall ist es ASCII nicht. Benutzer von 'charAt' sollten wissen, welche Werte zurückgegeben werden können und welche Bedeutung sie haben. –