Ragnar
Ragnar

Reputation: 665

specific part of string

How can I get a specific portion of string, let suppose I have a string

file:/C:/Users/uiqbal/Desktop/IFM_WorkingDirectory/SWA_Playground/SWA_Playground.ds

and I want to get only

C:/Users/uiqbal/Desktop/IFM_WorkingDirectory/SWA_Playground/

The string is dynamic so its not always the same I just want to remove the file word from the beginning and the last portion with .ds extension

I gave it a try as

String resourceURI = configModel.eResource().getURI().toString();
//This line gives:  file:/C:/Users/uiqbal/Desktop/IFM_WorkingDirectory/SWA_Playground/SWA_Playground.ds

String sourceFilePath = resourceURI.substring(6, resourceURI.length()-17)
//This line gives C:/Users/uiqbal/Desktop/IFM_WorkingDirectory/SWA_Playground/

This resourceURI.length()-17 can create problems because the SWA_Playground.ds is not always same. How can I just remove the last portion from this string

Thanks

Upvotes: 1

Views: 96

Answers (5)

janasainik
janasainik

Reputation: 831

Make use of lastIndexof() method from String class.

String resourceURI = configModel.eResource().getURI().toString();
String sourceFilePath = resourceURI.substring(6, resourceURI.lastIndexOf('.'));

Upvotes: 0

Adrodoc
Adrodoc

Reputation: 773

You simply want to remove everything before the first slash and after the last one? Then do this:

String resourceURI = configModel.eResource().getURI().toString();
//This line gives:  file:/C:/Users/uiqbal/Desktop/IFM_WorkingDirectory/SWA_Playground/SWA_Playground.ds

String[] sourceFilePathArray = ressourceURI.split("/");
String sourceFilePath = "";
for (int i = 1; i < sourceFilePathArray.length - 1; i++)
  sourceFilePath = sourceFilePath + sourceFilePathArray[i] + "/";
//sourceFilePath now equals C:/Users/uiqbal/Desktop/IFM_WorkingDirectory/SWA_Playground/

Upvotes: 0

Cfx
Cfx

Reputation: 2312

You need a regex:

resourceURI.replaceAll("^file:/", "").replaceAll("[^/]*$", "")

Upvotes: 0

Robby Cornelissen
Robby Cornelissen

Reputation: 97120

Like this:

String sourceFilePath = resourceURI.substring(
        resourceURI.indexOf("/") + 1, resourceURI.lastIndexOf('/') + 1);

Basically, create a substring containing everything between the first slash and the last slash.

Output will be:

C:/Users/uiqbal/Desktop/IFM_WorkingDirectory/SWA_Playground/

Upvotes: 0

yunandtidus
yunandtidus

Reputation: 4086

You should use the File class

String sourceFile = "file:/C:/Users/uiqbal/Desktop/IFM_WorkingDirectory/SWA_Playground/SWA_Playground.ds";
Sring filePath = sourceFile.substring(6);

File f = new File(filePath);
System.out.println(f.getParent());
System.out.println(f.getName());

First you remove the file:/ prefix, then you have a windows Path and you can create a File instance.

Then you use getParent() method to get the folder path, and getName() to get the file name.

Upvotes: 2

Related Questions