Parse user-defined format in Java

Sven Arends
:

I am working on a format parser in Java and have some trouble with that. The format is stored so that users can change it to their likings.

format: '[prefix] [name] [suffix]: [msg]'

To put my values in the format I use String.replace() in Java.

format = getFormatTemplate(); // '[prefix] [name] [suffix]: [msg]'

format = format.replace("[prefix]", prefix); // prefix = "Hello";
format = format.replace("[name]", name); // name = "username";
format = format.replace("[suffix]", suffix); // suffix = "World";
format = format.replace("[msg]", msg); // msg = "Test message";

This will result in the output Hello username World: Test message as I expect. But when some parts of the string are empty there will be a space there.

When for example the suffix is empty the output will be Hello username : Test message note the space between the name and the :

How can I get rid of that so that some parts can be empty without breaking the user defined format?

Is there a better way to parse and apply the format?

Andreas
:

The following method will do the job:

static String replace(String text, Map<String, String> values) {
    StringBuilder result = new StringBuilder();
    int textIdx = 0;
    for (int startIdx; (startIdx = text.indexOf('[', textIdx)) != -1; ) {
        int endIdx = text.indexOf(']', startIdx + 1);
        if (endIdx == -1)
            break;
        result.append(text.substring(textIdx, startIdx));
        textIdx = endIdx + 1;
        String value = values.get(text.substring(startIdx + 1, endIdx));
        if (value != null && ! value.isEmpty()) {
            result.append(value); // Replace placeholder with non-empty value
        } else if (result.length() != 0 && result.charAt(result.length() - 1) == ' ') {
            result.setLength(result.length() - 1); // Remove space before placeholder
        } else if (textIdx < text.length() && text.charAt(textIdx) == ' ') {
            textIdx++; // Skip space after placeholder
        }
    }
    result.append(text.substring(textIdx));
    return result.toString();
}

Test

public static void main(String[] args) {
    test("[prefix] [name] [suffix]: [msg]",
         Map.of("prefix", "Hello",
                "name", "username",
                "suffix", "World",
                "msg", "Test message"));
    test("[prefix] [name] [suffix]: [msg]",
         Map.of("name", "username",
                "suffix", "World",
                "msg", "Test message"));
    test("[prefix] [name] [suffix]: [msg]",
         Map.of("prefix", "Hello",
                "suffix", "World",
                "msg", "Test message"));
    test("[prefix] [name] [suffix]: [msg]",
         Map.of("prefix", "Hello",
                "name", "username",
                "msg", "Test message"));
    test("[prefix] [name] [suffix]: [msg]",
         Map.of("prefix", "Hello",
                "name", "username",
                "suffix", "World"));
    test("[prefix] [name] [suffix]: [msg]",
         Map.of());
}

static void test(String text, Map<String, String> values) {
    System.out.println('"' + replace(text, values) + '"');
}

Output

"Hello username World: Test message"
"username World: Test message"
"Hello World: Test message"
"Hello username: Test message"
"Hello username World:"
":"

Notice how multiple spaces are correctly eliminated when consecutive placeholders are missing/empty.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

DataFrame To user defined Format

From Dev

User defined packages in Java

From Dev

Parse-server user.getSessionToken() not defined

From Dev

Parse-server user.getSessionToken() not defined

From Dev

java User Defined Classes and Objects

From Dev

Java Array of user defined type

From Dev

File Name defined by user in Java

From Dev

Java parse a number in exponential format

From Dev

json response date format to user defined date format

From Dev

How to parse user defined html attributes using html DOM with '-' in that attribute?

From Dev

why jquery serialize() can't parse user defined attributes?

From Dev

copy/pastspecial cell format in VBA User-Defined Function

From Dev

How to convert pandas DataFrame result to user defined json format

From Dev

Java console calculator with user-defined variables

From Dev

Pentaho Data Integration User Defined Java Class

From Dev

Java how to manage user-defined variables

From Dev

Access method from user defined package in java

From Dev

Java: User defined String, that points to an Array

From Dev

issues with user-defined methods java

From Dev

User-defined class objects in Java TreeMap

From Dev

Jenkins java process started as a defined user

From Dev

NullPointerException in user defined static variables in java (android)

From Dev

Using setDate for User defined class.. Java

From Java

How to parse/format dates with LocalDateTime? (Java 8)

From Dev

What Java Date Format to correctly parse?

From Dev

Java parse date from TextField with a different format

From Dev

Java : How to parse date format to show specific output format?

From Dev

How to create user defined immutable class in Java which is having user defined class object as a class member?

From Dev

ReferenceError: Parse is not defined

Related Related

  1. 1

    DataFrame To user defined Format

  2. 2

    User defined packages in Java

  3. 3

    Parse-server user.getSessionToken() not defined

  4. 4

    Parse-server user.getSessionToken() not defined

  5. 5

    java User Defined Classes and Objects

  6. 6

    Java Array of user defined type

  7. 7

    File Name defined by user in Java

  8. 8

    Java parse a number in exponential format

  9. 9

    json response date format to user defined date format

  10. 10

    How to parse user defined html attributes using html DOM with '-' in that attribute?

  11. 11

    why jquery serialize() can't parse user defined attributes?

  12. 12

    copy/pastspecial cell format in VBA User-Defined Function

  13. 13

    How to convert pandas DataFrame result to user defined json format

  14. 14

    Java console calculator with user-defined variables

  15. 15

    Pentaho Data Integration User Defined Java Class

  16. 16

    Java how to manage user-defined variables

  17. 17

    Access method from user defined package in java

  18. 18

    Java: User defined String, that points to an Array

  19. 19

    issues with user-defined methods java

  20. 20

    User-defined class objects in Java TreeMap

  21. 21

    Jenkins java process started as a defined user

  22. 22

    NullPointerException in user defined static variables in java (android)

  23. 23

    Using setDate for User defined class.. Java

  24. 24

    How to parse/format dates with LocalDateTime? (Java 8)

  25. 25

    What Java Date Format to correctly parse?

  26. 26

    Java parse date from TextField with a different format

  27. 27

    Java : How to parse date format to show specific output format?

  28. 28

    How to create user defined immutable class in Java which is having user defined class object as a class member?

  29. 29

    ReferenceError: Parse is not defined

HotTag

Archive