我必须从给定字符串中删除前导和尾随空格,以及组合连续的空格。例如,
String str = " this is a string containing numerous whitespaces ";
我需要将其作为:
返回"this is a string containing numerous whitespaces";
但问题是我无法使用String#trim()
。 (这是一个家庭作业,我不允许使用这样的方法。)我目前正在尝试逐个访问每个角色,但很不成功。
我需要一个优化的代码。有人可以帮忙吗?我需要它在今天完成:(
答案 0 :(得分:5)
编辑:在我们被告知无法使用replaceAll
之前发布的答案。我将它留在这里,理由是它可能对其他读者有用,即使它对OP没用。
我需要一个优化的代码。
你真的需要它被优化吗?你认为这是一个瓶颈吗?
这应该这样做:
str = str.replaceAll("\\s+", " ");
这是一个正则表达式,用“用单个空格替换任何连续的空格”。它可能不是最快的,但我会在尝试其他任何事情之前对其进行基准测试。
请注意,这将用空格替换所有空格 - 因此,如果您有标签或其他空白字符,它们也将替换为空格。
答案 1 :(得分:2)
str = str.replaceAll(" +", " ").trim();
怎么样?
如果您不想使用trim()
(我真的没有理由不这样做),请将其替换为:
str = str.replaceAll(" +", " ").replaceAll("^ ", "").replaceAll(" $", "");`
答案 2 :(得分:2)
我不允许使用这些方法。我要用循环做这个 和所有。
所以如果你不能使用更快更有效的方式,我会为你写一些代码:
String str = " this is a string containing numerous whitespaces ";
StringBuffer buff = new StringBuffer();
String correctedString = "";
boolean space = false;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == ' ') {
if (!space && i > 0) {
buff.append(c);
}
space = true;
}
else {
buff.append(c);
space = false;
}
}
String temp = buff.toString();
if (temp.charAt(temp.length() - 1) == ' ') {
correctedString = temp.substring(0, buff.toString().length() - 1);
System.out.println(correctedString);
}
System.out.println(buff.toString())
但这是“har”并且只是为了“学习”。
更有效的方法是确保使用@JonSkeet和@BrunoReis指出的方法
答案 3 :(得分:0)
在不使用任何内置库函数的情况下删除空格 这只是一个固定数组大小的简单示例。
public class RemWhite{
public static void main(String args[]){
String s1=" world qwer ";
int count=0;
char q[]=new char[9];
char ch[]=s1.toCharArray();
System.out.println(ch);
for(int i=0;i<=ch.length-1;i++)
{
int j=ch[i];
if(j==32)
{
continue;
}
else
q[count]=ch[i];
count++;
}
System.out.println(q);
}}
答案 4 :(得分:0)
删除单个或重新出现的空间。
public class RemoveSpace {
public static void main(String[] args) {
char space = ' ';
int ascii = (int) space;
String str = " this is a string containing numerous whitespaces ";
char c[] = str.toCharArray();
for (int i = 0; i < c.length - 1; i++) {
if (c[i] == ascii) {
continue;
} else {
System.out.print(c[i]);
}
}
}
}
答案 5 :(得分:0)
如果您不想使用任何内置方法,请参阅
private static String trim(String s)
{
String s1="";boolean nonspace=false;
for(int i=0;i<s.length();i++)
{
if(s.charAt(i)!=' ' || nonspace)
{
s1 = s1+s.charAt(i);
nonspace = true;
}
}
nonspace = false;
s="";
for(int i=s1.length()-1;i>=0;i--)
{
if(s1.charAt(i)!=' ' || nonspace)
{
s = s1.charAt(i)+s;
nonspace = true;
}
}
return s;
}
答案 6 :(得分:0)
package removespace;
import java.util.Scanner;
public class RemoveSpace {
public static void main(String[] args) {
Scanner scan= new Scanner(System.in);
System.out.println("Enter the string");
String str= scan.nextLine();
String str2=" ";
char []arr=str.toCharArray();
int i=0;
while(i<=arr.length-1)
{
if(arr[i]==' ')
{
i++;
}
else
{
str2= str2+arr[i];
i++;
}
}
System.out.println(str2);
}
}
答案 7 :(得分:-1)
此代码用于删除给定字符串中的空格和字母的重现,而不使用trim()。我们接受来自用户的字符串。我们使用charAt()将它们分隔成字符,然后我们将每个字符与null('')进行比较。如果找到null,我们跳过它并在else部分中显示该字符。为了跳过null,我们将索引i递增1。 尝试使用此代码来解决您的问题。
String name = " abc ";
System.out.println(name);
for (int i = 0; i < name.length(); i++) {
char ch = name.charAt(i);
if (ch == ' ') {
i = 2 + i - 2;
} else {
System.out.print(name.charAt(i));
}
}