[英]Correct way to trim a string in Java
在Java中,我这样做是为了修剪一个字符串:
String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.trim();
System.out.println("after->>"+input+"<<-");
输出是:
before->> some Thing <<-
after->>some Thing<<-
作品。 但我想知道如果通过为自己分配一个变量,我做的是正确的。 我不想通过创建另一个变量并为其分配修剪值来浪费资源。 我想在原地进行修剪。
我这样做对吗?
你做得对。 从文档 :
字符串是不变的; 它们的值在创建后无法更改。 字符串缓冲区支持可变字符串。 因为String对象是不可变的,所以可以共享它们。
还来自文档 :
修剪
public String trim()
返回字符串的副本,省略前导和尾随空格。 如果此String对象表示空字符序列,或者此String对象表示的字符序列的第一个和最后一个字符的代码都大于'\\ u0020'(空格字符),则返回对此String对象的引用。
否则,如果字符串中没有代码大于'\\ u0020'的字符,则会创建并返回表示空字符串的新String对象。
否则,令k为代码大于'\\ u0020'的字符串中第一个字符的索引,并且令m为代码大于'\\ u0020'的字符串中最后一个字符的索引。 创建一个新的String对象,表示该字符串的子字符串,该字符串以索引k处的字符开头,以索引m处的字符结尾,即this.substring(k,m + 1)的结果。
此方法可用于从字符串的开头和结尾修剪空白(如上所述)。
退货 :
删除了前导和尾随空格的此字符串的副本,如果没有前导或尾随空格,则为此字符串。
由于Java中的字符串是不可变对象 ,因此无法就地执行修剪。 修剪字符串唯一可以做的就是创建字符串的新修剪版本并返回它(这就是trim()
方法的作用)。
理论上,您不是为自己分配变量。 您将方法trim()的返回值赋给变量输入。
实际上,trim()方法实现已经过优化,因此它只在必要时创建(并返回)另一个变量。 在其他情况下(当实际上不需要修剪时)它返回对原始字符串的引用(在这种情况下,您实际上是为自己分配变量)。
无论如何trim()不会修改原始字符串,所以这是使用它的正确方法。
传统方法是使用内联修剪方法...例如:
String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
System.out.println("after->>"+input.trim()+"<<-");
如果它是一个应该为所有用途进行修剪的字符串,请像往常一样修剪它。 如果您想将您的意图传达给其他开发人员,重新使用与您相同的内存位置并不是一个坏主意。 使用Java编写时,内存管理不是关键问题,因为Java的“礼物”是您不需要管理它。
是的,但是在垃圾收集器删除输入指向的原始值之前,仍然会有两个对象。 Java中的字符串是不可变的。 这是一个很好的解释: Java中字符串的不变性 。
String::strip…
旧的String::trim
方法有一个奇怪的空格 定义 。
正如这里所讨论的,Java 11为String
类添加了新的strip…
方法。 这些使用了更精通Unicode的空白定义。 请参阅类JavaDoc for Character::isWhitespace
的此定义的规则。
示例代码。
String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.strip();
System.out.println("after->>"+input+"<<-");
如果我们必须修剪一个String而不使用Java的split(),split()方法,那么下面的源代码可能会有所帮助。
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();
}
java string trim()方法消除了前导和尾随空格
public class StringTrimExample{
public static void main(String args[]){
String s1=" hello string ";
System.out.println(s1+"javatpoint");//without trim()
System.out.println(s1.trim()+"javatpoint");//with trim()
}}
产量
hello string javatpoint
hello stringjavatpoint
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.