在Java中,我这样做是为了修剪一个字符串:
String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.trim();
System.out.println("after->>"+input+"<<-");
输出是:
before->> some Thing <<-
after->>some Thing<<-
作品。但我想知道如果通过为自己分配一个变量,我做的是正确的。我不想通过创建另一个变量并为其分配修剪值来浪费资源。我想在原地进行修剪。
我这样做是对的吗?
答案 0 :(得分:18)
你做得对。来自the documentation:
字符串是不变的;它们的值在创建后无法更改。字符串缓冲区支持可变字符串。因为String对象是不可变的,所以可以共享它们。
同样来自documentation:
<强>修剪强>
public String trim()
返回字符串的副本,包含前导和尾随空格 省略。如果此String对象表示空字符序列, 或由...表示的字符序列的第一个和最后一个字符 这个String对象的代码都大于'\ u0020'(空格 (),然后返回对此String对象的引用。
否则,如果没有代码大于'\ u0020'的字符 在字符串中,然后是一个表示空字符串的新String对象 已创建并返回。
否则,让k为字符串中第一个字符的索引 其代码大于'\ u0020',并且让m为索引 字符串中的最后一个字符,其代码大于'\ u0020'。一个 创建新的String对象,表示此子字符串 以索引k处的字符开头并以。结尾的字符串 索引m处的字符,即this.substring(k,m + 1)的结果。
此方法可用于从中修剪空白(如上所述) 字符串的开头和结尾。
<强>返回强>:
删除了前导和尾随空格的此字符串的副本,如果没有前导或尾随白色,则为此字符串 空间。
答案 1 :(得分:10)
作为strings in Java are immutable objects,无法就地执行修剪。修剪字符串唯一可以做的就是创建字符串的新修剪版本并返回它(这就是trim()
方法的作用)。
答案 2 :(得分:2)
理论上,您不是为自己分配变量。您将方法trim()的返回值赋给变量输入。
实际上,trim()方法实现已经过优化,因此只在必要时才创建(并返回)另一个变量。在其他情况下(当实际上不需要修剪时)它返回对原始字符串的引用(在这种情况下,您实际上是为自己分配变量)。
无论如何trim()不会修改原始字符串,所以这是使用它的正确方法。
答案 3 :(得分:1)
传统方法是使用内联修剪方法...例如:
String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
System.out.println("after->>"+input.trim()+"<<-");
如果它是一个应该为所有用法进行修剪的字符串,请像完成前一样修剪它。如果您想将您的意图传达给其他开发人员,重新使用与您相同的内存位置并不是一个坏主意。在用Java编写时,内存管理不是关键问题,因为Java的“礼物”是你不需要管理它。
答案 4 :(得分:1)
是的,但是在垃圾收集器删除输入指向的原始值之前,仍然会有两个对象。 Java中的字符串是不可变的。这是一个很好的解释:Immutability of Strings in Java。
答案 5 :(得分:1)
String::strip…
旧的String::trim
方法的strange definition为whitespace。
如here所述,Java 11向String
类添加了新的strip…
方法。这些使用更精通Unicode的空白定义。在Character::isWhitespace
的JavaDoc类中查看此定义的规则。
示例代码。
String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.strip();
System.out.println("after->>"+input+"<<-");
或者您可以去除just the leading或just the trailing空格。
答案 6 :(得分:0)
如果我们必须修剪String而不使用trim(),Java的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();
}
答案 7 :(得分:0)
java string trim()方法消除了前导和尾随空格
let parameters = ["details": [
"fullName": "manish",
"password": "123456",
"email": "manish@gmail.com",
"mobile": "",
"dob": "",
"profilePic": ""
]] as [String : Any]
输出
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()
}}