【问题标题】:How do I validate a string format in Java? [duplicate]如何在 Java 中验证字符串格式? [复制]
【发布时间】:2021-06-20 16:48:53
【问题描述】:

我得到以下 url 字符串路径作为示例: 以下字符串url格式/version/mydownload?a=abc&b=bbb&c=ccc 我的问题,如何验证?你会拆分/& 然后循环还是有更好的验证方法?

我的 url 字符串不包括 httpwww,但它是 url 字符串的一部分,如上所示,您是否将字符串拆分并检查其格式是否正确?

【问题讨论】:

  • 正确的解决方案是使用 URL/URI 解析器;见stackoverflow.com/questions/13592236。由于需要处理各种特殊情况,手动验证 URL 确实很棘手。
  • 我有一个特定的字符串格式(url),需要验证该字符串格式是否通过。
  • 格式总是相同的(url)
  • 使用解析器仍然是正确的解决方案...除非您的基准测试/分析告诉您此验证确实是性能瓶颈。 (不要过早优化...)
  • @StephenP 不,它没有回答我的问题,而且我没有验证整个 url,只是验证 url 字符串的一部分。

标签: java


【解决方案1】:

我确信使用 URL 解析器是解析 URL 的好方法,但鉴于这实际上只需要一些基本的字符串拆分,这似乎有点过头了。

以下代码应该可以工作:

String url = "/version/mydownload?a=abc&b=bbb&c=ccc";
int c1 = url.indexOf('?');
String path = c1 != -1 ? url.substring(0, c1) : url;
String[] keys = url.substring(c1+1).split("&");
System.out.println("Path: "+path+", keys: "+Arrays.toString(keys));

要提取键值对,只需将字符串按= 拆分,如下所示:

String firstKey = keys[0];
int c2 = firstKey.indexOf('=');
String key = firstKey.substring(0, c2);
String value = firstKey.substring(c2+1);

哪些打印:

Path: /version/mydownload, keys: [a=abc, b=bbb, c=ccc]

【讨论】:

  • 比这更复杂。例如,? 之后的必须是键值对,? 之前的路径必须是有效的路径等。
  • @jingx 在我看来,OP 想要做的就是提取 /version/mydownload a=abc b=bbb c=cccthis comment
  • 是的,但是当人们以“例如”开始和结束他们的叙述时,您并不真正知道确切的规则或可能的输入是什么。我怀疑 OP 也不知道,更有理由使用 URL 解析器。
猜你喜欢
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 2011-04-13
  • 2012-10-02
  • 2018-09-12
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
相关资源
最近更新 更多