我有一个跟随字符串,我必须拆分并在某些条件下替换值
http://localhost:8080/api/upload/form/{uploadType}/{uploadName}
我必须仅为{uploadType} / {uploadName}替换值。我真的不知道如何用价值取代它们。
{uploadType}/{uploadName}
中的字符串可以是任何要替换的类型。
我尝试过以下内容:
package com.test.poc;
public class TestString {
public static void main(String[] args) throws ClassNotFoundException {
String toBeFixed = "http://localhost:8080/api/upload/form/{uploadType}/{uploadName}";
String[] toReplaceWith =toBeFixed.split("{");
for (String string : toReplaceWith) {
System.out.println("string : "+string);
}
}
}
但我得到以下例外:
Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition
{
at java.util.regex.Pattern.error(Pattern.java:1713)
at java.util.regex.Pattern.closure(Pattern.java:2775)
at java.util.regex.Pattern.sequence(Pattern.java:1889)
at java.util.regex.Pattern.expr(Pattern.java:1752)
at java.util.regex.Pattern.compile(Pattern.java:1460)
at java.util.regex.Pattern.<init>(Pattern.java:1133)
at java.util.regex.Pattern.compile(Pattern.java:823)
at java.lang.String.split(String.java:2292)
at java.lang.String.split(String.java:2334)
at com.test.poc.TestString.main(TestString.java:9)
编辑:
这是我根据Sean Patrick Floyd
回答
public String doPOSTPathVariable(String uri,List paramsList) throws IllegalArgumentException, IllegalAccessException, InstantiationException, Exception{
String uriString="";
UriComponents uriComponents = UriComponentsBuilder.fromUriString(uri).build();
for (int j = 0; j<= paramsList.size(); j++) {
System.out.println("path variable");
MethodParams methodParams;
methodParams =(MethodParams) paramsList.get(j);
if(methodParams.isPrimitive() && methodParams.getDataType()=="boolean"){
uriString = uriComponents.expand(true).encode().toUriString();
}
if(methodParams.isPrimitive() && methodParams.getDataType()=="java.math.BigDecimal"){
uriString = uriComponents.expand(123).encode().toUriString();
}
if(methodParams.isPrimitive() && methodParams.getDataType()=="java.lang.String"){
uriString = uriComponents.expand("hexgen").encode().toUriString();
}
}
return uriString;
}
但我得到以下例外:
java.lang.IllegalArgumentException: Not enough variable values available to expand 'uploadName'
at org.springframework.web.util.UriComponents$VarArgsTemplateVariables.getValue(UriComponents.java:1025)
at org.springframework.web.util.UriComponents.expandUriComponent(UriComponents.java:443)
at org.springframework.web.util.UriComponents.access$1(UriComponents.java:431)
at org.springframework.web.util.UriComponents$FullPathComponent.expand(UriComponents.java:800)
at org.springframework.web.util.UriComponents.expandInternal(UriComponents.java:413)
at org.springframework.web.util.UriComponents.expand(UriComponents.java:404)
at com.hexgen.tools.HexgenClassUtils.doPOSTPathVariable(HexgenClassUtils.java:208)
at com.hexgen.reflection.HttpClientRequests.handleHTTPRequest(HttpClientRequests.java:77)
at com.hexgen.reflection.HexgenWebAPITest.main(HexgenWebAPITest.java:115)
有人可以帮我这个吗?
答案 0 :(得分:2)
也许UriBuilder
?
UriBuilder.fromPath("http://localhost:8080/api/upload/form/{uploadType}/{uploadName}").build("foo", "bar");
(方便地使用您正在使用的确切格式)
答案 1 :(得分:2)
如果您使用Spring MVC,则可以使用此功能with the new URI builder technology。
UriComponents uriComponents =
UriComponentsBuilder.fromUriString(
"http://example.com/hotels/{hotel}/bookings/{booking}").build();
URI uri = uriComponents.expand("42", "21").encode().toUri();
// or:
String uriString = uriComponents.expand("42", "21").encode().toUriString();
(事实上你仍然可以使用这项技术,即使你不使用Spring MVC,但是你需要在Classpath上安装Spring MVC jar,很明显)
答案 2 :(得分:1)
你可以尝试这个:
public class TestString {
public static void main(String[] args) throws ClassNotFoundException {
String toBeFixed = "http://localhost:8080/api/upload/form/{uploadType}/{uploadName}";
String[] toReplaceWith =toBeFixed.split("\\{");
for (String string : toReplaceWith) {
System.out.println("string : "+string);
}
}
}
答案 3 :(得分:1)
UrlBuilder是解决方案,但如果您只是查看分隔符,也可以使用子字符串:
String url = "http://localhost:8080/api/upload/form/{uploadType}/{uploadName}";
int lastSlash = url.lastIndexOf('/');
int secondLastSlash = url.substring(0, lastSlash).lastIndexOf('/');
System.out.println(url.substring(secondLastSlash+1, lastSlash));
System.out.println(url.substring(lastSlash+1));
要删除花括号,可以在字符串上使用String.replace('{','')和String.replace('}','')
答案 4 :(得分:0)
{
是用于范围重复的正则表达式meta-character
。
之前
toBeFixed = toBeFixed.replaceAll("\\{", "\n");
另见文档:http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html
类似的问题:Java String ReplaceAll method giving illegal repetition error?