Merge "Add a utility method to StringUtils."
commit
f32b2d5c5e
|
@ -22,7 +22,6 @@ import android.util.SparseArray;
|
|||
import com.android.inputmethod.annotations.UsedForTesting;
|
||||
import com.android.inputmethod.keyboard.ProximityInfo;
|
||||
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
|
||||
import com.android.inputmethod.latin.makedict.Word;
|
||||
import com.android.inputmethod.latin.settings.NativeSuggestOptions;
|
||||
import com.android.inputmethod.latin.utils.CollectionUtils;
|
||||
import com.android.inputmethod.latin.utils.JniUtils;
|
||||
|
@ -352,12 +351,7 @@ public final class BinaryDictionary extends Dictionary {
|
|||
public GetNextWordPropertyResult getNextWordProperty(final int token) {
|
||||
final int[] codePoints = new int[MAX_WORD_LENGTH];
|
||||
final int nextToken = getNextWordNative(mNativeDict, token, codePoints);
|
||||
int len = 0;
|
||||
// codePoints is null-terminated if its length is shorter than the array length.
|
||||
while (len < MAX_WORD_LENGTH && codePoints[len] != 0) {
|
||||
++len;
|
||||
}
|
||||
final String word = new String(codePoints, 0, len);
|
||||
final String word = StringUtils.getStringFromNullTerminatedCodePointArray(codePoints);
|
||||
return new GetNextWordPropertyResult(getWordProperty(word), nextToken);
|
||||
}
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ public final class StringUtils {
|
|||
|
||||
public static String newSingleCodePointString(int codePoint) {
|
||||
if (Character.charCount(codePoint) == 1) {
|
||||
// Optimization: avoid creating an temporary array for characters that are
|
||||
// Optimization: avoid creating a temporary array for characters that are
|
||||
// represented by a single char value
|
||||
return String.valueOf((char) codePoint);
|
||||
}
|
||||
|
@ -205,6 +205,24 @@ public final class StringUtils {
|
|||
return codePoints;
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a String from a code point array
|
||||
*
|
||||
* @param codePoints a code point array that is null terminated when its logical length is
|
||||
* shorter than the array length.
|
||||
* @return a string constructed from the code point array.
|
||||
*/
|
||||
public static String getStringFromNullTerminatedCodePointArray(final int[] codePoints) {
|
||||
int stringLength = codePoints.length;
|
||||
for (int i = 0; i < codePoints.length; i++) {
|
||||
if (codePoints[i] == 0) {
|
||||
stringLength = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return new String(codePoints, 0 /* offset */, stringLength);
|
||||
}
|
||||
|
||||
// This method assumes the text is not null. For the empty string, it returns CAPITALIZE_NONE.
|
||||
public static int getCapitalizationType(final String text) {
|
||||
// If the first char is not uppercase, then the word is either all lower case or
|
||||
|
|
|
@ -61,15 +61,6 @@ public class WordProperty {
|
|||
}
|
||||
}
|
||||
|
||||
private static int getCodePointCount(final int[] codePoints) {
|
||||
for (int i = 0; i < codePoints.length; i++) {
|
||||
if (codePoints[i] == 0) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return codePoints.length;
|
||||
}
|
||||
|
||||
// This represents invalid word when the probability is BinaryDictionary.NOT_A_PROBABILITY.
|
||||
public WordProperty(final int[] codePoints, final boolean isNotAWord,
|
||||
final boolean isBlacklisted, final boolean hasBigram,
|
||||
|
@ -77,7 +68,7 @@ public class WordProperty {
|
|||
final ArrayList<int[]> bigramTargets, final ArrayList<int[]> bigramProbabilityInfo,
|
||||
final ArrayList<int[]> shortcutTargets,
|
||||
final ArrayList<Integer> shortcutProbabilities) {
|
||||
mCodePoints = new String(codePoints, 0 /* offset */, getCodePointCount(codePoints));
|
||||
mCodePoints = StringUtils.getStringFromNullTerminatedCodePointArray(codePoints);
|
||||
mIsNotAWord = isNotAWord;
|
||||
mIsBlacklisted = isBlacklisted;
|
||||
mHasBigrams = hasBigram;
|
||||
|
@ -86,9 +77,8 @@ public class WordProperty {
|
|||
|
||||
final int bigramTargetCount = bigramTargets.size();
|
||||
for (int i = 0; i < bigramTargetCount; i++) {
|
||||
final int[] bigramTargetCodePointArray = bigramTargets.get(i);
|
||||
final String bigramTargetString = new String(bigramTargetCodePointArray,
|
||||
0 /* offset */, getCodePointCount(bigramTargetCodePointArray));
|
||||
final String bigramTargetString =
|
||||
StringUtils.getStringFromNullTerminatedCodePointArray(bigramTargets.get(i));
|
||||
final ProbabilityInfo bigramProbability =
|
||||
new ProbabilityInfo(bigramProbabilityInfo.get(i));
|
||||
mBigramTargets.add(
|
||||
|
@ -98,9 +88,8 @@ public class WordProperty {
|
|||
|
||||
final int shortcutTargetCount = shortcutTargets.size();
|
||||
for (int i = 0; i < shortcutTargetCount; i++) {
|
||||
final int[] shortcutTargetCodePointArray = shortcutTargets.get(i);
|
||||
final String shortcutTargetString = new String(shortcutTargetCodePointArray,
|
||||
0 /* offset */, getCodePointCount(shortcutTargetCodePointArray));
|
||||
final String shortcutTargetString =
|
||||
StringUtils.getStringFromNullTerminatedCodePointArray(shortcutTargets.get(i));
|
||||
mShortcutTargets.add(
|
||||
new WeightedString(shortcutTargetString, shortcutProbabilities.get(i)));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue