2012-07-28 36 views
14

Cắt xén chuỗi Java không loại bỏ ký tự khoảng trống cho tôi.Cắt xén chuỗi Java không có hiệu lực

String rank = (some method); 
System.out.println("(" + rank + ")"); 

Đầu ra là (1 ). Chú ý không gian bên phải của 1.

Tôi phải xóa dấu cách khỏi chuỗi rank nhưng không phải rank.trim() cũng không phải rank.replace(" ","") xóa nó.

Chuỗi rank vẫn giữ nguyên theo cách tương tự.

Edit: Full Code::

Document doc = Jsoup.connect("http://www.4icu.org/ca/").timeout(1000000).get(); 
Element table = doc.select("table").get(7); 
Elements rows = table.select("tr"); 
for (Element row: rows) { 
    String rank = row.select("span").first().text().trim(); 
    System.out.println("("+rank+")"); 
} 

Tại sao tôi không thể loại bỏ không gian đó?

+3

Bạn có sử dụng 'rank = rank.trim();' hoặc chỉ 'rank.trim(); '? Cái thứ hai sẽ không hoạt động. – Baz

+0

cung cấp mã() mà bạn đã sử dụng .. –

+0

@Baz câu hỏi đã chỉnh sửa –

Trả lời

36

Mã nguồn của trang web đó hiển thị ký tự html đặc biệt  . Hãy thử tìm kiếm hoặc thay thế những điều sau trong Chuỗi java của bạn: \u00A0.

Đó là không gian không thể phá vỡ. Xem: I have a string with "\u00a0", and I need to replace it with "" str_replace fails

rank = rank.replaceAll("\u00A0", ""); 

sẽ hoạt động. Có thể thêm một đôi \\ thay vì \.

+3

@TerryLi Hãy xem, nếu bạn cung cấp đầy đủ thông tin, chúng tôi có thể giúp bạn. Vui vì tôi có thể giúp :) – Baz

+0

@Baz Cảm ơn, nó hoạt động! – dogankadriye

+0

Đáng chú ý câu trả lời này: http://stackoverflow.com/questions/1437933/how-to-properly-trim-whitespaces-from-a-string-in-java – Quaternion

3

Bạn có gán chuỗi không?

String rank = " blabla "; 
rank = rank.trim(); 

Đừng quên nhiệm vụ thứ hai hoặc chuỗi được cắt sẽ không đi đâu cả.

Bạn có thể tìm kiếm loại công cụ này lên trong API cũng như: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#trim()

Như bạn có thể thấy phương pháp này trả về một String, giống như hầu hết các phương pháp hoạt động trên một String làm. Chúng trả về String đã sửa đổi và để nguyên chuỗi ban đầu.

+0

câu hỏi đã chỉnh sửa –

7

Bạn nên gán kết quả cắt lại cho biến số String. Nếu không, nó sẽ không hoạt động, bởi vì các chuỗi trong Java là không thay đổi.

String orig = " quick brown fox "; 
String trimmed = original.trim(); 
+0

câu hỏi đã chỉnh sửa –

0

Chức năng cắt trả về một bản sao mới của chuỗi, có khoảng trắng đầu và cuối được bỏ qua.

rank = rank.trim();// This will remove and save rank without leading and trailing spaces 

sẽ cho kết quả bạn muốn.

Phương pháp thay thế sẽ không hoạt động nếu bạn chuyển chuỗi rỗng để thay thế.

+0

câu hỏi đã chỉnh sửa –

+1

Nếu bạn không chắc chắn về khoảng trắng, tôi sẽ đề nghị bạn sử dụng regex để trích xuất số. Sử dụng "((- | \\ +)? [0-9] + (\\. [0-9] +)?) +" Regex sẽ trích xuất chuỗi biểu mẫu số. –

+0

Tôi sẽ tư vấn cho bạn. Nhưng tôi vẫn tự hỏi hai không gian đó là gì. –

0

Vì chuỗi trong java là bất biến tức là chúng không thể thay đổi. Bạn cần gán lại nó cho một số chuỗi tạm thời. Và sau đó sử dụng chuỗi đó bạn có thể chuyển đổi nó thành int.

String temp=rank.trim() 
int te= Integer.parseInt(temp) 
+0

Bạn không phải sử dụng một Chuỗi tạm thời. Bạn có thể sử dụng 'rank = rank.trim();' ... – Baz

+0

câu hỏi đã chỉnh sửa –

3

Ký tự là khoảng trắng không phá vỡ và do đó không bị xóa theo phương pháp trim().Lặp lại thông qua các ký tự và in giá trị int của mỗi ký tự, để biết bạn phải thay thế ký tự nào bằng một chuỗi rỗng để có được những gì bạn muốn.

1

Tôi gặp vấn đề tương tự và đã thực hiện một số thao tác nhỏ trên phương thức trim() của java.
Bạn có thể sử dụng mã này để cắt:

public static String trimAdvanced(String value) { 

     Objects.requireNonNull(value); 

     int strLength = value.length(); 
     int len = value.length(); 
     int st = 0; 
     char[] val = value.toCharArray(); 

     if (strLength == 0) { 
      return ""; 
     } 

     while ((st < len) && (val[st] <= ' ') || (val[st] == '\u00A0')) { 
      st++; 
      if (st == strLength) { 
       break; 
      } 
     } 
     while ((st < len) && (val[len - 1] <= ' ') || (val[len - 1] == '\u00A0')) { 
      len--; 
      if (len == 0) { 
       break; 
      } 
     } 


     return (st > len) ? "" : ((st > 0) || (len < strLength)) ? value.substring(st, len) : value; 
    } 
Các vấn đề liên quan