当前位置: 首页 > 知识库问答 >
问题:

Java trim():在修剪之前检查空字符串的最干净方法?

翟展
2023-03-14

我使用trim()方法来修剪一些字符串字段中的前导和尾随空格。

siteRequest.getName().trim();

然而,当字符串字段为null时,它会按预期引发异常。我可以在修剪前检查值,如下所示:

siteRequest.getName() ? siteRequest.getName() : siteRequest.getName().trim();

然而,如果可能的话,我更喜欢一种更清洁的方式,这样就有几个人已经面临了这个问题。有什么更聪明的方法的建议吗?

共有3个答案

栾越
2023-03-14

不幸的是,Java仍然缺少空安全导航操作符。最接近的复制方法是使用可选的:

String trimmed = Optional.ofNullable(untrimmed).map(String::trim).orElse(null);

然而,很容易看出,在大多数情况下,这并不比简单的三元数好。如果您有一长串潜在的Nullable,并且希望避免嵌套的ternaries,那么它确实会大放异彩:

String trimmed = Optional.ofNullable(request)
 .map(Request::getName)
 .map(String::trim)
 .orElse(null);
桂学
2023-03-14

通常,这是通过Apache Commons库的trim方法完成的。这个库非常常见,基本上是Java的一部分。它将为字符串返回null。E、 g.StringUtils。修剪(“myString”)将返回“myString”

叶弘深
2023-03-14

我喜欢@Sebastiaan van den Broek的想法,但不想使用该库,因此要查看其实现:

// Trim
//-----------------------------------------------------------------------
/**
 * <p>Removes control characters (char &lt;= 32) from both
 * ends of this String, handling {@code null} by returning
 * {@code null}.</p>
 *
 * <p>The String is trimmed using {@link String#trim()}.
 * Trim removes start and end characters &lt;= 32.
 * To strip whitespace use {@link #strip(String)}.</p>
 *
 * <p>To trim your choice of characters, use the
 * {@link #strip(String, String)} methods.</p>
 *
 * <pre>
 * StringUtils.trim(null)          = null
 * StringUtils.trim("")            = ""
 * StringUtils.trim("     ")       = ""
 * StringUtils.trim("abc")         = "abc"
 * StringUtils.trim("    abc    ") = "abc"
 * </pre>
 *
 * @param str  the String to be trimmed, may be null
 * @return the trimmed string, {@code null} if null String input
 */
public static String trim(final String str) {
    return str == null ? null : str.trim();
}

在我看来,没有更好的方法来实施它。使用Optionals不是一个选项。因此,问题的原始解决思路得到了确认。

 类似资料:
  • 问题内容: 我在我的系统中将电话号码存储为VARCHAR2,以允许用户选择在电话号码前输入“ +”字符。 我的regexp完美地做到了这一点,但是当将数字存储在数据库中时,我想去除用户可能输入的所有空格。 我的正则表达式允许以下格式 我知道我可以通过不让用户在数字中添加空格来解决问题,但是我个人经验表明,由于客户端的某些愚蠢格式而导致验证错误令人沮丧。我曾尝试在INSERT / UPDATE触发器

  • 问题内容: 在Java中,我这样做是为了修剪字符串: 输出为: 作品。但是我想知道是否通过给自己分配一个变量来做正确的事情。我不想通过创建另一个变量并将调整后的值分配给它来浪费资源。我想就地进行修剪。 那我这样做对吗? 问题答案: 您做对了。从文档中: 字符串是常量;它们的值创建后无法更改。字符串缓冲区支持可变字符串。由于String对象是不可变的,因此可以共享它们。 同样从文档中: 修剪 公共字

  • 问题内容: 如何修剪JavaScript中的字符串? 问题答案: 自IE9 +起,所有浏览器都具有字符串方法。 对于不支持的浏览器,可以使用MDN中的以下polyfill : 也就是说,如果使用,也可以使用,并且可以处理undefined / null。 看到这个:

  • 问题内容: 在目标C中,可以执行以下操作来检查字符串: 如何在Swift中检测空字符串? 问题答案: 现在具有使用以下命令检测空字符串的内置功能: Apple发行前文档:“字符串和字符”。

  • 问题内容: 如何修剪Java字符串中的开头或结尾字符? 例如,斜杠字符“ /”-我对空格不感兴趣,并且希望在不同的时间修剪前导或尾随字符。 问题答案: 你可以用 领导: 尾随:

  • 问题内容: 与该方法等效的 JavaScript 是什么: C#仅在字符串的 开头 和 结尾 处修剪所选字符! 问题答案: 一行就足够了: 在功能上: