2013-05-02 3 views
0

У меня есть следующая строка, которую я должен разделить и заменить значение некоторого условияJava разделить и заменить строку со значением

http://localhost:8080/api/upload/form/{uploadType}/{uploadName} 

, в котором я должен заменить значение только для {uploadType}/{ uploadName}. Я действительно не знаю, как их заменить.

Строки, которые находятся в {uploadType}/{uploadName}, могут быть любого типа для замены.

Я пытался что-то вроде следующего:

пакета 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) 

EDIT:

это метод я попытался на основе 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

no параметра, подлежащего замене, будет вычитаться только за время выполнения –

ответ

0

A { является регулярным выражением meta-character, используемым для повторения диапазона.

, прежде чем делать что

toBeFixed = toBeFixed.replaceAll("\\{", "\n"); 

см Docs также: http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

Похожие вопросы: Java String ReplaceAll method giving illegal repetition error?

+0

'http: // localhost: 8080/api/upload/form/ uploadType}/uploadName} 'is out put, если я следую вашему коду, как я могу заменить те два со значением –

2

UriBuilder Пожалуй?

UriBuilder.fromPath("http://localhost:8080/api/upload/form/{uploadType}/{uploadName}").build("foo", "bar"); 

(удобно бывает использовать точное форматирование вы используете)

+0

, номер параметра, который будет заменен, будет вычитаться только за время выполнения. –

+0

С' UriBuilder', являющимся шаблоном построителя, вы можете итеративно добавьте к нему компоненты, используя свои удобные методы, которые возвращаются. Его существует для вашей ситуации точно так же, как ваша, намного чище, чем регулярное выражение. – Quetzalcoatl

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

} 
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, но вы должны иметь баночку Spring MVC на Classpath, очевидно)

+0

Я следовал за вашим вводом, но он дает мне java.lang.IllegalArgumentException: Недостаточно переменных значений, доступных для расширения 'uploadName'', будет обновлен вопрос –

+0

. Пожалуйста, посмотрите мой отредактированный вопрос –

+0

@ Этот метод работает только если вы знаете количество параметров во время компиляции –

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 («{», «») и строки.replace ('}', '') в строках

Смежные вопросы