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
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;