`

小心String类的trim陷阱

阅读更多

最近在调试一段Java代码的时候,发生个奇怪的现象,在一个字符串的后面跟了一个不可见字符(acsii编码为0x13),对该字符串进行trim操作之后,发现该不可见字符消失了,在调试的过程中,没有认为会是因为trim造成的,但是在阅读了java的String类代码之后,才终于明白trim方法到底是怎么回事了。

 

 

public String trim() {
	int len = count;
	int st = 0;
	int off = offset;      /* avoid getfield opcode */
	char[] val = value;    /* avoid getfield opcode */

	while ((st < len) && (val[off + st] <= ' ')) {
	    st++;
	}
	while ((st < len) && (val[off + len - 1] <= ' ')) {
	    len--;
	}
	return ((st > 0) || (len < count)) ? substring(st, len) : this;
}
 注意其中的while判断部分,自己原来一直以为trim只是比较字符是否等于空格,但实际上trim函数会把所有包含空格在内的以及空格之前的所有不可见字符全部滤掉,因为空格的ascii码是0x20,这也就是为什么0x13字符经过trim之后就消失的原因了。
分享到:
评论

相关推荐

    Js里面给String添加trim()方法,实现去掉字符串两边空格

    原生的JavaScript自ECMAScript5标准引入后,就已经提供了`String.trim()`方法来去除字符串首尾的空白字符,这为开发者带来了极大的便利。然而,在此之前,或者在某些特定环境下(如旧版本的浏览器),`String.trim()...

    string类的构造方法_String类重要吗_C++_STL_string_

    在C++标准模板库(STL)中,`std::string`类是一个极其重要的容器,它专门用于存储、操作和管理字符串数据。标题中的“string类的构造方法”揭示了我们要探讨的核心内容——如何初始化和创建`std::string`对象。`std...

    String.prototype.trim:适用于String.prototype.trim的ES5规范的垫片

    String.prototype.trim 符合ES5规范的String.prototype.trim填充程序。 如果不可用,请调用其“ shim”方法对String.prototype.trim进行填充。 该软件包实现了接口。 它可以在ES3支持的环境中工作,并符合规范( ...

    介绍java中String类的方法

    Java中的String类是编程中非常基础且重要的一个类,它代表不可变的字符序列,即一旦创建,其内容就不能更改。下面我们将详细讨论String类的一些主要特性、实例化方式以及常用方法。 1. **String类的实例创建**: -...

    java中string.trim()函数的作用实例及

    // 将此字符数组赋值给arg2字符数组(java字符串底层是字符数组,这个字符数组就是String类的value属性); // 为什么小于等于32,请参看ASCII码表,ASCII表32表示一个空格,32以下有tab制表符,\n换行符,\r回车符...

    C#中String类常用方法汇总

    在C#编程语言中,String类是用于处理文本字符串的核心类。它提供了丰富的功能,使得在处理字符串时能够实现各种常见的操作。以下是对C#中String类常用方法的详细解释和示例: 1. `.ToLower()` 和 `.ToUpper()` 这...

    java中的String类常用方法解析(一)

    在Java编程语言中,`String`类是使用最频繁的类之一,它代表不可变的字符序列。本文将深入解析`String`类的一些常用方法,帮助开发者更好地理解和使用这个核心类。 1. **构造方法** - `String()`:创建一个空字符...

    java string类常用方法

    Java String 类常用方法 Java中的String类是Java语言中最基本的类之一,它提供了许多实用的方法来操作字符串。在日常开发中,我们经常会使用这些方法来完成字符串的处理和操作。下面我们将详细介绍Java String类中...

    IE8下String的Trim()方法失效的解决方法

    在JavaScript的世界里,`String.prototype.trim()`方法是一个非常实用的功能,它用于去除字符串两端的空白字符,如空格、换行符等。然而,在IE8及更早版本的Internet Explorer浏览器中,原生的`trim()`方法并未得到...

    String类方法使用例子

    在Java编程语言中,`String` 类是处理字符串的核心类,它包含了大量的方法,使得对字符串的操作变得简单而高效。本篇文章将详细讲解`String`类的一些常用方法,并通过具体的例子来展示它们的用法。 1. **创建String...

    String类使用

    在Java编程语言中,`String`类是使用最频繁的类之一,主要用于处理文本字符串。它的功能强大且灵活,能够满足各种字符串操作需求。本文将深入探讨`String`类的使用,帮助你快速掌握其核心概念和常见方法。 首先,`...

    Java的String类

    - 去除空格:`String trim()` - 删除字符串两端的空白字符。 7. **数据转换** - `static String valueOf(double d)`、`static String valueOf(long l)`、`static String valueOf(Object obj)`、`static String ...

    trim-right:与String#trim()类似,但仅删除右侧的空白

    //=&gt; ' unicorn'有关的 left-与String#trim()类似,但仅删除左侧的空白 -与String#trim()类似,但仅删除换行符Tidelift帮助维护人员实现开源的可持续发展,同时为公司提供帮助有关其依赖项的安全性,维护和许可的...

    JAVA【第5章:面向对象基础】_String类的常用方法.rar

    在Java编程语言中,面向对象基础是学习Java的基石,而`String`类则是最常用的类之一,几乎在每一个程序中都会见到它的身影。本章节将深入探讨`String`类的常用方法,帮助你更好地理解和运用这个核心组件。 `String`...

    String类的笔记

    ### String类的深入解析 在Java编程语言中,`String`类是计算机科学领域中一个极为重要的基础数据类型,用于处理文本数据。它被设计为不可变(immutable),这意味着一旦创建了一个`String`对象,其内容不能被改变...

    java String类常用方法练习小结

    【Java String类常用方法详解与实战】 在Java编程语言中,`String`类是一个非常重要的类,它代表不可变的字符序列。所有的字符串字面值(例如:"abc")都是`String`类的实例。本篇文章将深入探讨`String`类的一些...

    关于String类的一些方法

    在Java编程语言中,`String`类是使用最频繁的类之一,它代表不可变的字符序列。在本文中,我们将深入探讨`String`类的一些关键方法,这些方法在日常编程中极为常用,有助于字符串的处理和操作。 1. **构造方法**: ...

    java工具类(String)

    Java中的字符串处理是编程工作中非常常见且重要的任务,而String工具类则提供了许多方便实用的方法,使得我们在处理字符串时能够更加高效。以下是对Java String工具类的详细解析: 首先,了解Java中的String类。在...

    string类常用功能编写(C++)

    `std::string`类是标准库中的一个成员,提供了一系列高效且便捷的方法来操作字符串。本教程将深入探讨`std::string`类的常用功能,并通过实例讲解其用法。 1. **创建和初始化字符串** - `std::string`对象可以空...

Global site tag (gtag.js) - Google Analytics