Java 验证字符串是否为正数、空/空字符串

Java 验证字符串是否为正数、空/空字符串,java,guava,apache-commons,preconditions,Java,Guava,Apache Commons,Preconditions,我有一个接受字符串clientid的方法,该方法有以下要求: clientid可以是大于零的正数。但如果是负数或零,则抛出带有消息的IllegalArgumentException clientid不能是null或空字符串。但如果是,则抛出带有消息的IllegalArgumentException clientid也可以是普通字符串。例如,它可以是abcdefgh或任何其他字符串 这段代码运行良好。现在的问题是,我不能使用大于版本11的guava库。如果我确实使用它,那么它会给使用该库的客

我有一个接受字符串
clientid
的方法,该方法有以下要求:

  • clientid
    可以是大于零的正数。但如果是负数或零,则抛出带有消息的
    IllegalArgumentException
  • clientid
    不能是
    null
    或空字符串。但如果是,则抛出带有消息的
    IllegalArgumentException
  • clientid
    也可以是普通字符串。例如,它可以是
    abcdefgh
    或任何其他字符串

这段代码运行良好。现在的问题是,我不能使用大于版本11的guava库。如果我确实使用它,那么它会给使用该库的客户带来问题,因此简而言之,我正在寻找这一行的替代品
final Long id=Longs.tryParse(clientid)不使用番石榴,或可能使用较旧的番石榴版本11。因为在番石榴14或更高版本中添加了
Longs.tryParse
方法


最好的方法是什么?我们可以从Apache Commons中使用任何东西吗?

有点难看,但解决了您的问题,因为它不需要任何库

try {
    final long id = Long.parseLong(clientId);
    checkArgument(id > 0, "clientid must not be negative or zero, found '%s'.", clientid);
} catch (NumberFormatException e) {}

我建议用by重新包装番石榴。简而言之,您可以将Guava中的包重命名为
com.example.mypackage.com.google.common
,然后在项目中使用这些包

通过这样做,您可以使用最新版本的Guava,而不会给您的客户造成依赖冲突

以下是基于以下内容的POM示例:


4.0.0
com.example.mypackage

)。否则,IDE将使用具有原始包名的原始类,而不是重新打包的类。

为什么不使用看起来很难看的try{}catch(numberformatxception){}。。我想避免那样。。还有别的办法吗?好吧,公平地说,这也是之前的4行:这是一个在猪身上涂口红的问题,这是你的选择。是的。我想去掉catch block,所以这就是我之前使用Longs.tryParse的原因,但是如果除了这个我之前也知道的方法之外,没有其他方法,那么我将使用这个方法。我听说过这个解决方案。你能告诉我这是怎么回事吗?你是说我刚从你给我的链接中添加了maven shade插件?那我怎么用呢?此行将保持原样
final Long id=Longs.tryParse(clientid)唯一会改变的是导入?如果可能的话,你能提供一个这个插件的工作示例,让我了解它是如何工作的吗?我有点困惑,是的。基本上就是这么简单。我在回答中添加了一个示例POM。
try {
    final long id = Long.parseLong(clientId);
    checkArgument(id > 0, "clientid must not be negative or zero, found '%s'.", clientid);
} catch (NumberFormatException e) {}
import com.example.mypackage.com.google.common.primitives.Longs;