content: /**
    * Copyright 2017 JessYan
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
    * You may obtain a copy of the License at
    *
    *      http://www.apache.org/licenses/LICENSE-2.0
    *
    * Unless required by applicable law or agreed to in writing, software
    * distributed under the License is distributed on an "AS IS" BASIS,
    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    * See the License for the specific language governing permissions and
    * limitations under the License.
    */
  package <%= appPackage %>.utils;
  
  import android.text.InputFilter;
  import android.text.Spanned;
  import android.text.TextUtils;
  
  import org.json.JSONArray;
  import org.json.JSONException;
  import org.json.JSONObject;
  
  import java.io.StringReader;
  import java.io.StringWriter;
  import java.util.regex.Matcher;
  import java.util.regex.Pattern;
  
  import javax.xml.transform.OutputKeys;
  import javax.xml.transform.Source;
  import javax.xml.transform.Transformer;
  import javax.xml.transform.TransformerException;
  import javax.xml.transform.TransformerFactory;
  import javax.xml.transform.stream.StreamResult;
  import javax.xml.transform.stream.StreamSource;
  
  /**
   * ================================================
   * 处理字符串的工具类
   * <p>
   * Created by JessYan on 2016/3/16
   * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
   * <a href="https://github.com/JessYanCoding">Follow me</a>
   * ================================================
   */
  public class CharacterHandler {
  
      private CharacterHandler() {
          throw new IllegalStateException("you can't instantiate me!");
      }
  
      public static final InputFilter emojiFilter = new InputFilter() {//emoji过滤器
  
          Pattern emoji = Pattern.compile(
                  "[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",
                  Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
  
          @Override
          public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart,
                                     int dend) {
  
              Matcher emojiMatcher = emoji.matcher(source);
              if (emojiMatcher.find()) {
                  return "";
              }
  
              return null;
          }
      };
  
  
      /**
       * 字符串转换成十六进制字符串
       *
       * @return String 每个Byte之间空格分隔，如: [61 6C 6B]
       */
      public static String str2HexStr(String str) {
  
          char[] chars = "0123456789ABCDEF".toCharArray();
          StringBuilder sb = new StringBuilder("");
          byte[] bs = str.getBytes();
          int bit;
  
          for (int i = 0; i < bs.length; i++) {
              bit = (bs[i] & 0x0f0) >> 4;
              sb.append(chars[bit]);
              bit = bs[i] & 0x0f;
              sb.append(chars[bit]);
          }
          return sb.toString().trim();
      }
  
  
      /**
       * json 格式化
       *
       * @param json
       * @return
       */
      public static String jsonFormat(String json) {
          if (TextUtils.isEmpty(json)) {
              return "Empty/Null json content";
          }
          String message;
          try {
              json = json.trim();
              if (json.startsWith("{")) {
                  JSONObject jsonObject = new JSONObject(json);
                  message = jsonObject.toString(4);
              } else if (json.startsWith("[")) {
                  JSONArray jsonArray = new JSONArray(json);
                  message = jsonArray.toString(4);
              } else {
                  message = json;
              }
          } catch (JSONException e) {
              message = json;
          }
          return message;
      }
  
  
      /**
       * xml 格式化
       *
       * @param xml
       * @return
       */
      public static String xmlFormat(String xml) {
          if (TextUtils.isEmpty(xml)) {
              return "Empty/Null xml content";
          }
          String message;
          try {
              Source xmlInput = new StreamSource(new StringReader(xml));
              StreamResult xmlOutput = new StreamResult(new StringWriter());
              Transformer transformer = TransformerFactory.newInstance().newTransformer();
              transformer.setOutputProperty(OutputKeys.INDENT, "yes");
              transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
              transformer.transform(xmlInput, xmlOutput);
              message = xmlOutput.getWriter().toString().replaceFirst(">", ">\n");
          } catch (TransformerException e) {
              message = xml;
          }
          return message;
      }
  }
  