簡體   English   中英

在Java中修剪字符串的正確方法

[英]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()方法實現已經過優化,因此它只在必要時創建(並返回)另一個變量。 在其他情況下(當實際上不需要修剪時)它返回對原始字符串的引用(在這種情況下,您實際上是為自己分配變量)。

請參閱http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/String.java#String.trim%28%29

無論如何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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM