如何从URI中提取协议域名后的路径及参数部分?
提取Uri中协议/域名后的部分
在Dart中可以直接利用Uri类的内置属性实现需求,无需复杂的字符串处理,具体实现如下:
实现方案
通过Uri的路径和查询参数属性拼接结果,同时处理路径开头的斜杠:
String doMagic(Uri uri) { // 去掉路径开头的斜杠 String path = uri.path.substring(1); // 存在查询参数时,拼接?和参数部分 if (uri.hasQuery) { return '$path?${uri.query}'; } return path; }
测试示例
场景1:localhost带端口的Uri
final uri = Uri.parse("localhost:XXXX/category1/category2/?id=AAAA"); final result = doMagic(uri); print(result); // 输出: category1/category2/?id=AAAA
场景2:带HTTPS协议的域名Uri
final uri = Uri.parse("https://example.com/category1/category2/?id=AAAA"); final result = doMagic(uri); print(result); // 输出: category1/category2/?id=AAAA
原理说明
uri.path:返回Uri的路径部分,始终以/开头,通过substring(1)去掉开头的斜杠uri.hasQuery:判断Uri是否包含查询参数(即?后的内容)uri.query:返回查询参数字符串(不包含?)
内容的提问来源于stack exchange,提问作者yolo
相关产品推荐
相关产品推荐

