Java方法trim()小记
我们一般用trim()方法的主要作用,是为了去除字符串的首尾空格。然而根据我个人的实践经验发现,trim()这个方法只能去除部分的空格或空白符,比如半角空格;对于全角空格的话,用trim()并不能去除掉。所以这时候就需要通过正则来解决,去掉字符串首尾空格、空白符、换行符或制表符、换行符等:
public static void main(String[] args){
String keyword = " 空格符与制表符等 ";
keyword = keyword.replaceAll("^[ *| *| *|//s*]*", "").replaceAll("[ *| *| *|//s*]*$", "");
System.out.println("keyword : "+keyword);
}
还有一个我网上查找到的资料是这么解释的:首先将trim()这个方法进行反编译,得到:
public string Trim()
{ return this.TrimHelper(WhitespaceChars, 2);
}
TrimHelper这个方法进行反编译之后得到:
private string TrimHelper(char[] trimChars, int trimType)
{ int num = this.Length - 1; int startIndex = 0; if (trimType != 1)
{
startIndex = 0; while (startIndex < this.Length)
{ int index = 0; char ch = this[startIndex];
index = 0; while (index < trimChars.Length)
{ if (trimChars[index] == ch)
{ break;
}
index++;
} if (index == trimChars.Length)
{ break;
}
startIndex++;
}
} if (trimType != 0)
{
num = this.Length - 1; while (num >= startIndex)
{ int num4 = 0; char ch2 = this[num];
num4 = 0; while (num4 < trimChars.Length)
{ if (trimChars[num4] == ch2)
{ break;
}
num4++;
} if (num4 == trimChars.Length)
{ break;
}
num--;
}
} int length = (num - startIndex) + 1; if (length == this.Length)
{ return this;
} if (length == 0)
{ return Empty;
} return this.InternalSubString(startIndex, length, false);
}
TrimHelper有两个参数:第一个参数trimChars,是要从字符串两端删除掉的字符的数组;第二个参数trimType,是标识Trim()的类型。trimType的值有3个:当传入0时,去除字符串头部的空白字符;传入1时,去除字符串尾部的空白字符;传入其他数值则去掉字符串两端的空白字符。最后得出总结是:String.Trim()方法会去除字符串两端,不仅仅是空格字符,它总共能去除25种字符:('/t', '/n', '/v', '/f', '/r', ' ', '/x0085', '/x00a0', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '?', '/u2028', '/u2029', ' ', '?')。
另外还有两个方法和trim()类似:去除字符串头部空白字符的TrimStart()和去除字符串尾部空白字符的TrimEnd()。
如果想去除字符串两端的任意字符,可使用Trim的重载方法:String.Trim(Char[]),该方法的源码是:
public string Trim(params char[] trimChars)
{ if ((trimChars == null) || (trimChars.Length == 0))
{
trimChars = WhitespaceChars;
} return this.TrimHelper(trimChars, 2);
}
需要注意的是:空格 != 空白字符,想要删除空格可以使用Trim(' ')。
Java方法trim()小记的更多相关文章
- Java:AQS 小记-2(ReentrantLock)
Java:AQS 小记-2(ReentrantLock) 整体结构 ReentrantLock 类图 AbstractOwnableSynchronizer 类 public abstract cla ...
- Java:AQS 小记-1(概述)
Java:AQS 小记-1(概述) 概述 全称是 Abstract Queued Synchronizer(抽象队列同步器),是阻塞式锁和相关的同步器工具的框架,这个类在 java.util.conc ...
- Java:ThreadLocal小记
Java:ThreadLocal小记 说明:这是看了 bilibili 上 黑马程序员 的课程 java基础教程由浅入深全面解析threadlocal 后做的笔记 内容 ThreadLocal 介绍 ...
- Java:反射小记
Java:反射小记 对 Java 中的 反射,做一个微不足道的小小小小记 概念 Java 反射指的是在 Java 程序运行状态中,对于任何一个类,都可以获得这个类的所有属性和方法:对于给定的一个对象, ...
- Java:内部类小记
Java:内部类小记 对 Java 中的 内部类,做一个微不足道的小小小小记 首先:内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的. 成员内部类 成员内 ...
- Java:异常小记
Java:异常小记 对 Java 中的 异常 ,做一个微不足道的小小小小记 Error 和 Exception 相同点: Exception 和Error 都是继承了 Throwable 类,在 Ja ...
- Java:创建对象小记
Java:创建对象小记 对 Java 中的创建对象的内容,做一个微不足道的小小小小记 创建对象的方式概述 使用 new 关键字:Person person = new Person(); 反射创建:使 ...
- C++调用JAVA方法详解
C++调用JAVA方法详解 博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...
- JNI中C调用Java方法
背景需求 我们需要在JNI的C代码调用Java代码.实现原理:使用JNI提供的反射借口来反射得到Java方法,进行调用. JNI关键方法讲解. 1. 在同一个类中,调用其他方法 JNIEXPORT v ...
随机推荐
- lua UT测试工具
luaunit Luaunit is a unit-testing framework for Lua, in the spirit of many others unit-testing frame ...
- RabbitMQ模拟器使用方法
同事推荐了一个很好玩的RabbitMQ模拟器,记录一下简要使用方法. 模拟器地址 http://tryrabbitmq.com/ 使用方法: 直接将画框左面的图标拖进画图区,构建想要的拓扑图: 按住A ...
- 樹的DFS和BFS
菜鸟心得.... 不对请指出....... /*BFS,广度优先搜索树,用最简单的2叉树来举例, 树的结构如下: A B C D E F GH I J K L M N O广度优先搜索树, 顺序应该是A ...
- python基础:算法是什么
"算法"是什么? 简单来说,算法就是告诉计算机要做什么,是对如何做一件事情的详细描述或者详细的操作步骤. 待补充~~~
- laravel5.3----------调度任务以及Artisan
1.在使用的过程中会遇到有些函数不能用需要在php配置文件里面打开: disable_functions = exec,passthru,popen,proc_open,shell_exec,syst ...
- .NET中表单的JS验证
JS验证代码如下:(需要引入两个JS包) <script type="text/javascript" src="/js/jquery.validate.min.j ...
- JSSDK用法//////////////////zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
参照微信官方文档,调试成功之后总结如下: 步骤一:绑定域名 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”. 备注:登录后可在“开发者中心”查看对应的接口权限. 步骤二: ...
- 1-MySQL命令行
0.显示数据库 show databases; 1.选择数据库 use 数据库名; 2.显示数据库中的表 show tables; 3.显示数据表的结构 describe 表名; 4.显示表中记录 S ...
- 夺命雷公狗-----React---19--表单的值的修改
少了1个e,在代码部分补回,否则会报错 <!DOCTYPE> <html> <head> <meta charset="utf-8"> ...
- https基础流程
背景: https基于SSL,目的是保护http通信的过程,防止中间人篡改信息,或假冒服务端的问题. 要解决的问题: 1. 客户端如何证明是与正确的服务端进行通信 2. 客户端如何确认收到服务端的 ...