I have to read commands from a file I have and take necessary actions according to each command. I was able to find out the process of reading from the file and what the command is, but I am having trouble transferring the specific information contained in the command to the program. As an example, the line read is as follows
Add id:12 name:"Sandik" singer:"Muslum Gurses" year:2009 count:5 price:20
I have separated this reading line in each space as u can see in below.
Scanner scan = new Scanner(new File(args[0]));
while (scan.hasNextLine()) {
String data = scan.nextLine();
String[] readedCommand = data.split(" ");
After this operation, readedCommands[0]
gives me the read command. For the above example, readedCommands[0] = "Add"
After this step, I need to extract the information from the rest of the command, but I have no idea how to extract information such as id, name, singer. I will be grateful if you could help me. Thank you in advance.
Advertisement
Answer
You can do it by splitting the string twice:
- Split the given string, using the regex,
s(?=w+:)
- Then iterate the resulting array from the index,
1
(because the string at index,0
is the command) and split each element further on:
Demo:
public class Main {
public static void main(String[] args) {
String data = "Add id:15 singer:"Tarkan" name:"Adimi Kalbine Yaz" year:2010 count:10 price:20";
// First, split on whitespace
String[] parts = data.split("\s(?=\w+:)");
// The first element in the array is the command
String command = parts[0];
System.out.println("Command: " + command);
// Split the remaining elements on ':'
for (int i = 1; i < parts.length; i++) {
String[] keyVal = parts[i].split(":");
if (keyVal.length == 2) {
String key = keyVal[0];
String value = keyVal[1];
System.out.println("Key: " + key + ", Value: " + value);
}
}
}
}
Output:
Command: Add
Key: id, Value: 15
Key: singer, Value: "Tarkan"
Key: name, Value: "Adimi Kalbine Yaz"
Key: year, Value: 2010
Key: count, Value: 10
Key: price, Value: 20
Explanation of the regex, s(?=w+:)
:
s
specifies whitespace.(?=w+:)
specifies positive lookahead for one or more word character(s) followed by a: