Rakim
Rakim

Reputation: 1107

Add brackets to sequence of chars in string

I need to put a sequence of characters in a String in brackets in such way that it would choose the longest substring as the optimal to put in brackets. To make it clear because it is too complicated to explain with words: If my input is:

'these are some chars *£&$'
'these are some chars *£&$^%(((£'

the output in both inputs respectively should be:

'these are some chars (*£&$)'
'these are some chars (*£&$^%)(((£'

so I would like to put in brackets the sequence *£&$^% IF it exists otherwise put in brackets just *£&$ I hope it makes sense!

Upvotes: 0

Views: 5578

Answers (2)

asaini007
asaini007

Reputation: 836

In the general case, this method works. It surrounds the earliest substring of any keyword in any given String:

public String bracketize() {
    String chars = ...; // you can put whatever input (such as 'these are some chars *£&$')
        String keyword = ...; // you can put whatever keyword (such as *£&$^%)
        String longest = "";
        for(int i=0;i<keyword.length()-1;i++) {
            for(int j=keyword.length(); j>i; j--) {
                String tempString = keyword.substring(i,j);
                if(chars.indexOf(tempString) != -1 && tempString.length()>longest.length()) {
                    longest = tempString;
                }
            }
        }
       if(longest.length() == 0)
           return chars; // no possible substring of keyword exists in chars, so just return chars
       String bracketized = chars.substring(0,chars.indexOf(longest))+"("+longest+")"+chars.substring(chars.indexOf(longest)+longest.length());
       return bracketized;
}

The nested for loops check every possible substring of keyword and select the longest one that is contained in the bigger String, chars. For example, if the keyword is Dog, it will check the substrings "Dog", "Do", "D", "og", "o", and "g". It stores this longest possible substring in longest (which is initialized to the empty String). If the length of longest is still 0 after checking every substring, then no such substring of keyword can be found in chars, so the original String, chars, is returned. Otherwise, a new string is returned which is chars with the substring longest surrounded by brackets (parentheses).

Hope this helps, let me know if it works.

Upvotes: 2

Davis Broda
Davis Broda

Reputation: 4135

Try something like this (assuming target string only occurs once).

String input = "these are some chars *£&$"
String output = "";
String[] split;

if(input.indexOf("*£&$^%")!=(-1)){
     split = input.split("*£&$^%");
     output = split[0]+"(*£&$^%)";
     if(split.length>1){
          output = output+split[1];
     }
}else if(input.indexOf("*£&$")!=(-1)){
     split = input.split("*£&$");
     output = split[0]+"(*£&$)";
     if(split.length>1){
         output = output+split[1];
     }
}else{
     System.out.println("does not contain either string");
}

Upvotes: 1

Related Questions