Java:切断字符串结尾的更简单方法

Java:切断字符串结尾的更简单方法,java,substring,Java,Substring,每次我遇到这个问题,我都会问自己同样的问题:难道没有一种更简单、更不烦人的方法可以将字符串从末尾剪成X个字符吗 假设我得到了“Helly there bla bla”,并且-为什么-我需要剪掉最后2个字符,从而得到“Helly there bla b”。 我现在要做以下工作: String result = text.substring(0, text.length() - 2); 我想做一些事情,比如: String result = text.cutOffEnd(2); 我知道那里有很多

每次我遇到这个问题,我都会问自己同样的问题:难道没有一种更简单、更不烦人的方法可以将字符串从末尾剪成X个字符吗

假设我得到了
“Helly there bla bla”
,并且-为什么-我需要剪掉最后2个字符,从而得到
“Helly there bla b”
。 我现在要做以下工作:

String result = text.substring(0, text.length() - 2);
我想做一些事情,比如:

String result = text.cutOffEnd(2);
我知道那里有很多字符串库,但我不知道其中的很多,而且我从来没有见过这样的东西,所以我希望你们中的某个人能更了解:)

编辑:

Q:为什么不构建自己的util方法/类呢

A:我不想使用自己的util方法。我不会为“null或empty”或其他琐碎的东西编写util方法。我同意这样的观点,那就是肯定已经有了可用的东西,因为我要说的是,很多人在他们的一生中经常需要这种功能。 另外:我在许多不同的项目中工作,只想依靠一个简单的库调用,如“Strings.nullToEmpty(str)”等。我只是不自己构建这样的东西,尽管它很琐碎

Q:为什么是
text.substring(0,text.length()-2)不够好

A:如果你把它与我想要的功能相比,它非常笨重。另外,请考虑:如果您确定字符串,它将变得更难处理:

String result = otherClass.getComplicatedCalculatedText(par1, par2).substring(0,
otherClass.getComplicatedCalculatedText(par1, par2).length() - 2);
显然,我需要使用一个局部变量,这在这一点上是非常不必要的。。。可以简单地说:

String result = otherClass.getComplicatedCalculatedText(par1, par2).cutOffEnd(2);

检查以下代码

public class OddNumberLoop {

  public static void main(String[] args) {

    String st1 = "Helly there bla bla";
    String st2 = st1.substring(0, st1.length() - 2);
    System.out.println(st2);

  }
}


祝你好运

starnard库中没有用于此的内置实用程序,但是自己编写一个util方法有多难

public static String cutOffEnd(String s, int n) {
    return s == null || s.length() <= n ? "" : s.substring(0, s.length() - n);
}
  • 顺便说一下:这些特性请求通常是向java编译器发出的。通常,这些特性对于语言来说并不引人注目,也不会被修复
  • 你为什么喜欢把它剪掉?如果是针对更高级别的解决方案,那么您喜欢匹配模式或结构。在这种情况下,您无论如何都应该使用自己的Util方法进行解析
一个现实的例子:

String url = "http://www.foo.bar/#abc";
String site = url.substring(0, url.indexOf("#"));
// this shall be extracted into a utils-method 
// anyway like `MyURLParser.cutOfAnchor()`.

禁止在这里要求一个具体的库。

使用一些字符串库。我建议使用Apache的commons lang

对你来说,这就足够了

import org.apache.commons.lang.StringUtils;
String result = StringUtils.removeEnd( "Helly there bla bla", "la");

text.substring(text.length()-2)
返回最后2个字符,而不是截断最后2个字符!只需创建自己的字符串util ClassThank icza,一秒钟前也意识到了这一点。使代码更加庞大。我编辑了这个问题。我建议不要使用像这样的实用方法。它在原始调用中隐藏一个npe,使用空字符串进行交易;它还添加到堆栈中;并且降低了可读性——对于保存一个方法参数这样一个简单的快捷方式,我不想为自己编写这样的东西,我在许多不同的项目中工作,如果有一个像Strings或StringUtils或任何其他的实用程序库,那就是白费力气。不幸的是,到目前为止我还没有找到这样的东西:/@guido-Well这只是为了演示。完整的解决方案还应检查
n
是否大于
字符串的长度
@icza是的,我明白这回答了问题,我的评论可能要放在OP not here下面。我不明白你在干什么。请解释一下。这就是我得到的,它庞大而烦人。你想要得到没有最后两个字符的st1字符串,所以当我们在Java中使用substring()时,我们必须给出子字符串的起点和终点。在我的代码中,我将字符串的第一个字符作为起点,然后将“st1.length()-2”作为终点。为了得到终点,我得到字符串的长度并减去2。这意味着将新字符串从现有字符串中分离出来,而不保留原始字符串(st1)的最后2个字符这听起来可能意味着什么,但您是否完全阅读了我的问题?我知道如何使用子字符串,但是,正如上面的入门问题中所述,这种方法非常庞大和烦人(imo),创建一个漂亮的util方法非常容易——但是为什么没有任何库得到一个呢?这是我的问题。
import org.apache.commons.lang.StringUtils;
String result = StringUtils.removeEnd( "Helly there bla bla", "la");