在本文中,我们将学习在java中把一个string截断到所需的字符数的集中方法。
首先,我们将探索使用jdk本身来实现这一目标的方法。然后,我们将研究如何使用一些流行的第三方库来实现这一目标。
使用jdk截断一个字符串java提供了许多方便的方法来截断一个 string 。让我们来看看。
使用 string 的 substring() 方法string 类有一个方便的方法,叫做 substring ,正如其名称所示 , substring() 返回指定索引之间的 string 部分。
让我们来看看它的运行情况。
static string usingsubstringmethod(string text, int length) { if (text.length() <= length) { return text; } else { return text.substring(0, length); }}在上面的例子中,如果指定的 length 大于 text 的长度,我们返回 text 本身。这是因为 传递给 substring() 的 length 大于 string 的字符数会导致 indexoutofboundsexception 。
否则,我们将返回从索引0开始并延伸到--但不包括--索引 length 的字符的子串。
让我们用一个测试案例来确认这一点。
static final string text = welcome to javanorth.cn;@testpublic void givenstringandlength_whenusingsubstringmethod_thentrim() { assertequals(trimstringonlength.usingsubstringmethod(text, 10), welcome to);}正如我们所看到的, 的起始索引是包容的,结束索引是排他的 。因此, 索引 length 处的字符将不包括在返回的子串中。
使用 string 的 split() 方法另一种截断 string 的方法是使用 split() 方法,它使用正则表达式将 string 分割成若干部分。
这里我们将使用一个叫做 positive lookbehind 的正则表达式特征来匹配从 string 开始的指定数量的字符。
static string usingsplitmethod(string text, int length) { string[] results = text.split((?<=g.{ + length + })); return results[0];}results 的第一个元素将是我们截断的 string ,如果 length 长于 text ,则是原始的 string 。
让我们测试一下我们的方法。
@testpublic void givenstringandlength_whenusingsplitmethod_thentrim() { assertequals(trimstringonlength.usingsplitmethod(text, 13), welcome to ba);}使用 pattern 类同样, 我们可以使用 pattern 类来编译一个正则表达式,该表达式可以匹配 string 的开头,直至指定的字符数 。
例如,让我们使用 {1, + length + }. 这个正则表达式至少匹配一个,最多匹配 length 个字符。
static string usingpattern(string text, int length) { optional result = pattern.compile(.{1, + length + }) .matcher(text) .results() .map(matchresult::group) .findfirst(); return result.ispresent() ? result.get() : empty;}正如我们在上面看到的,在将我们的正则表达式编译成 pattern 后,我们可以使用 pattern的 matcher() 方法来根据该正则表达式解释我们的 string 。然后我们就可以将结果分组,并返回第一个结果,也就是我们截断的 string 。
现在让我们添加一个测试案例来验证我们的代码是否如预期那样工作。
@testpublic void givenstringandlength_whenusingpattern_thentrim() { assertequals(trimstringonlength.usingpattern(text, 19), welcome to javanorth);}使用 charsequence 的 codepoints() 方法java 9提供了一个 codepoints() 方法来将一个 string 转换为一个码点值流。
让我们看看如何使用这个方法与 stream api相结合来截断一个字符串。
static string usingcodepointsmethod(string text, int length) { return text.codepoints() .limit(length) .collect(stringbuilder::new, stringbuilder::appendcodepoint, stringbuilder::append) .tostring();}在这里,我们使用 limit() 方法来限制 stream 的长度 。然后我们使用 stringbuilder 来建立我们的截断字符串。
接下来,让我们验证一下我们的方法是否有效。
@testpublic void givenstringandlength_whenusingcodepointsmethod_thentrim() { assertequals(trimstringonlength.usingcodepointsmethod(text, 6), welcom);}apache commons 库apache commons lang 库包括一个 stringutils 类,用于操作 string。
首先,让我们把apache commons dependency添加到我们的 pom.xml 。
org.apache.commons commons-lang3 3.12.0使用 stringutils的left() 方法stringutils 有一个有用的 静态 方法叫 left() 。 stringutils.left() 以一种安全的方式返回 string 最左边的指定字符数: 。
static string usingleftmethod(string text, int length) { return stringutils.left(text, length);}使用 stringutils 的 truncate() 方法另外,我们可以使用 stringutils.truncate() 来达到同样的目的。
public static string usingtruncatemethod(string text, int length) { return stringutils.truncate(text, length);}guava库除了使用核心java方法和apache commons库来截断一个 string 之外,我们还可以使用 guava。让我们首先把guava的 dependency 添加到我们的 pom.xml 文件中。
com.google.guava guava 31.0.1-jre现在我们可以使用guava的 splitter 类来截断我们的 string 。
static string usingsplitter(string text, int length) { iterable parts = splitter.fixedlength(length) .split(text); return parts.iterator() .next();}我们使用 splitter.fixedlength() 将我们的 string 分割成多个给定长度的片段。然后,我们返回结果中的第一个元素。
总结在这篇文章中,我们学习了在java中把一个 string 截断为特定数量的字符的各种方法。我们看了一些使用jdk来做这件事的方法。然后,我们使用一些第三方库来截断 string 。
ds1302引脚功能,ds1302电路
7 FPGA进阶级智能互联开发板
长三角深度融合,助推半导体产业发展
安防厂商缺芯困境下的真实业态
高精密高效率——pcb电路板层压机
如何使用JDK截断一个字符串
小米携带小米mix,小米note2,红米4x三款手机进军俄罗斯市场,再次血拼魅族?
openharmony框架
AI黑科技新品纷纷亮相,智能制造为何能够脱颖而出?
解析LCD屏与OLED屏对于屏内识别指纹的不同
使用ADS用微带线代替传输线而导致仿真结果发生变化
音圈马达能让你远程掌握窗户状态以确保安全
NXP技术专区全新上线,抢鲜体验有好礼!
AMD 联手赛灵思,西部数据举办 “服务器技术研讨会”
在世界杯上“大出风头”的AI
富士康郑州加大招聘力度,但iPhone 15在中国面临挑战
铸锻铣新工艺突破金属3D打印新突破
安桥TX-DS939 AV功放剖析
科创板睿创微纳董事、副总经理、董事会秘书赵芳彦介绍、履历信息
Digi-Key Electronics 通过CES 2020活动支持初创公司