Java split and replace a string with value

I have a following string which I have to split and replace the value on some condition

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

in which I have to replace the value only for {uploadType}/{uploadName} . I really don't know how to go about to replace them with value.

The strings which are in {uploadType}/{uploadName} can be of any type to replace.

I've tried something like the following :

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

}

but i get the following exception:

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 :

this is the method i tried based on Sean Patrick Floyd answer

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

but i get following exception :

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)

Could some one help me on this please?

Answers


A { is a regex meta-character used for range repetitions.

before doing that

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

see docs also :http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

Similar question :Java String ReplaceAll method giving illegal repetition error?


Perhaps the UriBuilder?

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

(Conveniently happens to use the exact formatting you are using)


If you use Spring MVC, this functionality is available out of the box 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();

(In fact you can still use this technology, even if you don't use Spring MVC, but you'll need to have the Spring MVC jar on the Classpath, obviously)


You can try this one :

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

}

UrlBuilder is the solution, but if you are just looking around delimiters, you can also use substrings:

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

To remove the curly braces, you can use String.replace('{', '') and String.replace('}', '') on the strings


Need Your Help

NullPointerException on cursor RawQuery - Android

java android sqlite cursor nullpointerexception

I am trying to create a db, insert into the db, pull from the db and display the contents (long) to a TextView.

pass arguments to function in a boost::thread

c++ multithreading boost

This is my first time using the boost thread function and prior to this I have little knowledge of working with multiple threads. I attempting to run a second instance of a function alongside the i...

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.