Androidでサロゲートペア文字列を排除するコード
サーバー側でutf8mb4に対応しておらずAndroid側で絵文字などを排除したい場合に。
package jp.hoge.util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* マルチバイト文字
* Created by y_hoshi on 2015/07/03.
*/
public class MultiByteString {
/**
* サロゲートペアが含まれる文字を削除した文字列をレスポンスする
* @param src
* @return
*/
static public String deleteSurrogateChar(String src){
Pattern pattern = Pattern.compile("[\\u0000-\\uFFFF]*");
Matcher matcher = pattern.matcher(src);
String outString = "";
if(!matcher.matches()){
for(int i =0; src.length() > i; i++){
if(MultiByteString.isSurrogate(src.substring(i, i+1))){
i++;
}
else{
outString = outString + src.charAt(i);
}
}
}
else{
outString = src;
}
return outString;
}
/**
* サロゲートペアが含まれているかチェックする
* @param text
* @return
*/
static public boolean isSurrogate(String text) {
for (int i = 0; i < text.length(); i++) {
if (text.charAt(i) >= '\uD800' && text.charAt(i) < ('\uDFFF' + 1)) {
return true;
}
}
return false;
}
}