android 过滤字符串中的Emoji表情

在网上找了一部分,然后根据自己的项目进行了改动。
1.没有采用自定义的表情发送模式,而是直接套用的android系统里面的Emoji表情。
2.在表情发送的时候,也没有采用Unicode编码方式。因为项目原因,而是采用了如下简单的方式。
希望可以帮助大家,直接上使用的代码:

//提交之前的数据,使表情编程数字数组 [-16, -97, -104, -95]
	String string;
	public String filterEmoji(String source) {
		if (!containsEmoji(source)) {
			return source;// 如果不包含,直接返回
		}
		StringBuilder buf = null;
		int len = source.length();
		System.out.println("filter running len = " + len);
		for (int i = 0; i < len; i++) {
			char codePoint = source.charAt(i);
			if (buf == null) {
				buf = new StringBuilder(source.length());
			}
			if (!isEmojiCharacter(codePoint)) {
				string = String.valueOf(codePoint);
			} else {
				try {
					StringBuilder builder = new StringBuilder(2);
					byte[] str = builder.append(String.valueOf(codePoint))
							.append(String.valueOf(source.charAt(i+1)))
							.toString().getBytes("UTF-8");
					String strin = Arrays.toString(str);
					String newString = strin.substring(1, strin.length() - 1);
					string = "Γ"+newString+"Γ";
					System.out.println("filters running newStr = " + string);
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}
				i++;
			}
			buf.append(string+"⅞");
		}
		if (buf == null) {
			return "";
		} else {
			if (buf.length() == len) {// 这里的意义在于尽可能少的toString,因为会重新生成字符串
				buf = null;
				return source;
			} else {
				System.out.println("filter running buf.toString() = " + buf.toString());
				String bufStr = buf.toString();
				String newBufStr= bufStr.substring(0, bufStr.length() - 1);
				return newBufStr;
			}
		}
	}

	// 判别是否包含Emoji表情
	private boolean containsEmoji(String str) {
		int len = str.length();
		for (int i = 0; i < len; i++) {
			if (isEmojiCharacter(str.charAt(i))) {
				return true;
			}
		}
		return false;
	}

	private boolean isEmojiCharacter(char codePoint) {
		return !((codePoint == 0x0) ||
				(codePoint == 0x9) ||
				(codePoint == 0xA) ||
				(codePoint == 0xD) ||
				((codePoint >= 0x20) && (codePoint <= 0xD7FF)) ||
				((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) ||
				((codePoint >= 0x10000) && (codePoint <= 0x10FFFF)));
	}

	//得到服务器的数据之后进行解析,显示在UI上
	String newsString;
	public void setString(TextView textView,String string) {
		StringBuilder stringBuilder = new StringBuilder();
		String arrays[] = string.split("⅞");
		for (int j = 0; j < arrays.length; j++) {
			System.out.println("filter running arrays[] = "+arrays[j]);
			String  ss = arrays[j];
			char char_ss = ss.charAt(0);
			System.out.println("filter running String.valueOf(char_ss) = "+String.valueOf(char_ss));
			if (String.valueOf(char_ss).equals("Γ")){
				String new_SS = ss.substring(1, ss.length() - 1);
				String strArrays[] = new_SS.split(", ");
				byte[] chars = new byte[strArrays.length];
				for (int i = 0; i < strArrays.length; ++i) {
					System.out.println("strArrays[i]:" + strArrays[i]);
					chars[i] = Byte.decode(strArrays[i]);
				}
				newsString = new String(chars);
			}else{
				newsString =ss;
			}
			stringBuilder.append(newsString);
			System.out.println("filter running stringBuilder.toString() = "+stringBuilder.toString());
			textView.setText(stringBuilder.toString());
		}
	}

更多资源源码下载:
不一样的RecyclerView优雅实现复杂列表布局
android自定义视频播放器
MediaPlayer和SurfaceView的结合使用
FloatingActionButton的使用
多层Fragment与ViewPager结合使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DT从零到壹

您的鼓励是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值