我需要在括号中的字符串中放置一系列字符,以便选择最长的子字符串作为放入括号的最佳字符串。要说清楚,因为它太复杂而无法用语言解释: 如果我的输入是:
'these are some chars *£&$'
'these are some chars *£&$^%(((£'
两个输入的输出分别应为:
'these are some chars (*£&$)'
'these are some chars (*£&$^%)(((£'
所以我想把序列放在括号中*£& $ ^%如果它存在,否则放在括号中只是*£& $ 我希望它有意义!
答案 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
的每个可能子字符串,并选择较大的String
,chars
中包含的最长子字符串。例如,如果关键字是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");
}