将括号添加到字符串中的字符序列中

时间:2013-10-25 18:49:33

标签: java string if-statement expression contains

我需要在括号中的字符串中放置一系列字符,以便选择最长的子字符串作为放入括号的最佳字符串。要说清楚,因为它太复杂而无法用语言解释: 如果我的输入是:

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

两个输入的输出分别应为:

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

所以我想把序列放在括号中*£& $ ^%如果它存在,否则放在括号中只是*£& $ 我希望它有意义!

2 个答案:

答案 0 :(得分:2)

在一般情况下,此方法有效。它包含任何给定字符串中任何关键字的最早的子字符串:

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

嵌套的for循环会检查keyword的每个可能子字符串,并选择较大的Stringchars中包含的最长子字符串。例如,如果关键字是Dog,它将检查子串“Dog”,“Do”,“D”,“og”,“o”和“g”。它将这个最长的子字符串存储在longest中(初始化为空字符串)。如果在检查每个子字符串后longest的长度仍为0,则keyword中找不到chars的此类子字符串,因此返回原始字符串chars。否则,返回一个新的字符串chars,子括号longest用括号括起来(括号)。

希望这会有所帮助,请告诉我它是否有效。

答案 1 :(得分:1)

尝试这样的事情(假设目标字符串只出现一次)。

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