如果没有 Java 的 trim() 方法,你如何递归地 trim 一个字符串?
How would you trim a string recursively without Java's trim() method?
以下方法returns 使用迭代修剪字符串。你将如何递归地处理这个问题? Link to source
public static String allTrim(String str) {
int j = 0;
int count = 0; // Number of extra spaces
int lspaces = 0;// Number of left spaces
char ch[] = str.toCharArray();
int len = str.length();
StringBuffer bchar = new StringBuffer();
if (ch[0] == ' ') {
while (ch[j] == ' ') {
lspaces++;
j++;
}
}
for (int i = lspaces; i < len; i++) {
if (ch[i] != ' ') {
if (count > 1 || count == 1) {
bchar.append(' ');
count = 0;
}
bchar.append(ch[i]);
} else if (ch[i] == ' ') {
count++;
}
}
return bchar.toString();
}
您可以使用递归来完成此操作,并使用两个额外的变量,一个用于 startIndex,一个用于 endIndex。您可以在 trimAll 方法中获取这些变量,也可以全局声明。
public class TrimSpace {
static String trimAll(String str, int startIndex, int endIndex){
if(str.charAt(startIndex)!=' ' && str.charAt(endIndex)!=' '){
return str.substring(startIndex, endIndex+1);
}
else if(str.charAt(startIndex)==' ' && str.charAt(endIndex)==' '){
return trimAll(str, startIndex+1, endIndex-1);
}
else if(str.charAt(startIndex)==' ' && str.charAt(endIndex)!=' '){
return trimAll(str, startIndex+1, endIndex);
}
else{
return trimAll(str, startIndex, endIndex-1);
}
}
public static void main(String[] args) {
String str = " hello ";
String result = trimAll(str, 0, str.length()-1);
System.out.println(result);
//to count extra spaces you just need to get the length difference
int extraSpaces = str.length() - result.length();
System.out.println(extraSpaces);
}
}
以下方法returns 使用迭代修剪字符串。你将如何递归地处理这个问题? Link to source
public static String allTrim(String str) {
int j = 0;
int count = 0; // Number of extra spaces
int lspaces = 0;// Number of left spaces
char ch[] = str.toCharArray();
int len = str.length();
StringBuffer bchar = new StringBuffer();
if (ch[0] == ' ') {
while (ch[j] == ' ') {
lspaces++;
j++;
}
}
for (int i = lspaces; i < len; i++) {
if (ch[i] != ' ') {
if (count > 1 || count == 1) {
bchar.append(' ');
count = 0;
}
bchar.append(ch[i]);
} else if (ch[i] == ' ') {
count++;
}
}
return bchar.toString();
}
您可以使用递归来完成此操作,并使用两个额外的变量,一个用于 startIndex,一个用于 endIndex。您可以在 trimAll 方法中获取这些变量,也可以全局声明。
public class TrimSpace {
static String trimAll(String str, int startIndex, int endIndex){
if(str.charAt(startIndex)!=' ' && str.charAt(endIndex)!=' '){
return str.substring(startIndex, endIndex+1);
}
else if(str.charAt(startIndex)==' ' && str.charAt(endIndex)==' '){
return trimAll(str, startIndex+1, endIndex-1);
}
else if(str.charAt(startIndex)==' ' && str.charAt(endIndex)!=' '){
return trimAll(str, startIndex+1, endIndex);
}
else{
return trimAll(str, startIndex, endIndex-1);
}
}
public static void main(String[] args) {
String str = " hello ";
String result = trimAll(str, 0, str.length()-1);
System.out.println(result);
//to count extra spaces you just need to get the length difference
int extraSpaces = str.length() - result.length();
System.out.println(extraSpaces);
}
}