2013-03-26 99 views
53

Tôi có một bài tập lập trình và một phần của nó yêu cầu tôi tạo mã đọc một dòng từ người dùng và xóa tất cả khoảng trắng trong dòng đó. dòng có thể bao gồm một từ trở lên.Cách xóa tất cả các khoảng trắng trong java

Điều tôi đang cố gắng thực hiện với chương trình này là phân tích từng ký tự cho đến khi tìm thấy dấu cách và sau đó lưu chuỗi con đó làm mã thông báo đầu tiên. sau đó lặp lại một lần nữa cho đến khi nó không còn mã thông báo hoặc kết thúc của dòng.

tôi tiếp tục nhận được điều này khi tôi cố gắng để biên dịch nó:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1 
    at java.lang.String.charAt(String.java:694) 
    at trim.main(trim.java:23) 

Đây là mã

import java.util.Scanner ; 
import java.lang.Character; 
import java.lang.String ; 
public class trim 
{ 
     public static void main (String[]args) 
     { 

     String a ; 
     String b ; 
     String c ; 
     char aChar ; 
     int i = 0 ; 

     Scanner scan = new Scanner(System.in); 

     a = scan.nextLine(); 
     a =a.trim() ; 


     for (; i >= 0 ; i++) 
     { 
      aChar = a.charAt(i) ; 
      if (aChar != 32) 
      { 
      a = a.substring(0,i+1); 
      } 
      else 
      { 
      b = a.substring(i,160) ; 
      b= b.trim(); 
      c = c + a ; 
      c = c.trim() ; 
      a = b ; 
      i = 0 ; 
      } 
      if (b.equals(null)) 
      { 
      i = -1 ; 
      } 
     } 
     } 
} 

dễ dàng hơn cách để làm điều này được đánh giá cao, nhưng tôi vẫn muốn để có được chương trình này đang làm việc.

và tôi không thể sử dụng dấu phụ ở đầu vào.


Cảm ơn tất cả mọi người cho tất cả sự giúp đỡ,

tôi sẽ sử dụng các phương pháp đơn giản hơn, và sẽ đọc javadoc.

+4

chức năng trong 'chuỗi con' không phải' substr' – kaysush

+3

Bạn cần trợ giúp từ sách "Đầu tiên lõi java". Đọc nó càng sớm càng tốt. – AmitG

+0

cảm ơn, tôi đoán các trang web mà nói với tôi để sử dụng chất nền là sai. –

Trả lời

9

Hãy thử điều này:

String str = "Your string with  spaces"; 
str = str.replace(" " , ""); 
+1

Tôi đoán điều này sẽ không hoạt động với các tab. – Nitram76

+0

câu trả lời với tab là coverd ở đây. http://stackoverflow.com/questions/5455794/removing-whitespace-from-strings-in-java – toidiu

8

Hãy thử:

string output = YourString.replaceAll("\\s","") 

s - chỉ ra nhân vật không gian (ký tự tab vv)

119

java.lang.String lớp có phương pháp substring không substr, đó là lỗi trong chương trình của bạn.

Ngoài ra, bạn có thể thực hiện điều này trong một dòng nếu bạn đồng ý sử dụng cụm từ thông dụng.

a.replaceAll("\\s+",""); 
+1

Bộ chọn '+' có cần thiết trong regex khi sử dụng replaceAll không? –

+2

Không cần thiết, nhưng nếu người dùng nhập nhiều hơn một khoảng trống, đoạn mã này sẽ xử lý các tình huống như vậy. – kaysush

+2

Ngay cả khi không có '+' nhiều dấu cách sẽ bị xóa, vì chúng sẽ khớp hoàn toàn riêng lẻ và bị xóa từng cái một. – Lii

19

Thay thế tất cả dấu cách trong chuỗi có ký tự trống.

String lineWithoutSpaces = line.replaceAll("\\s+",""); 
36

Tại sao không sử dụng regex cho điều này?

a = a.replaceAll("\\s",""); 

Trong bối cảnh của một regex, \s sẽ loại bỏ bất cứ điều gì đó là một nhân vật không gian (bao gồm cả không gian, nhân vật tab vv). Bạn cần phải thoát khỏi dấu gạch chéo ngược trong Java để regex biến thành \\s. Ngoài ra, vì Chuỗi không thay đổi, điều quan trọng là bạn chỉ định giá trị trả lại của regex làa.

1

Bạn không thể sử dụng Chuỗi.thay thế(" ", "");

+0

Chính xác ... không phải là cách dễ nhất? – aashima

2

Bạn có thể sử dụng một biểu thức chính quy để xóa không gian màu trắng, hãy thử đoạn rằng:

Scanner scan = new Scanner(System.in); 
    System.out.println(scan.nextLine().replaceAll(" ", "")); 
1
trim.java:30: cannot find symbol 
symbol : method substr(int,int) 
location: class java.lang.String 
b = a.substr(i,160) ; 

Không có phương pháp như substr trong lớp String.

sử dụng phương thức String.substring().

5
package com.infy.test; 

import java.util.Scanner ; 
import java.lang.String ; 

public class Test1 { 


    public static void main (String[]args) 
    { 

     String a =null; 


     Scanner scan = new Scanner(System.in); 
     System.out.println("*********White Space Remover Program************\n"); 
     System.out.println("Enter your string\n"); 
    a = scan.nextLine(); 
     System.out.println("Input String is :\n"+a); 


     String b= a.replaceAll("\\s+",""); 

     System.out.println("\nOutput String is :\n"+b); 


    } 
} 
3
public static String removeSpace(String s) { 
    String withoutspaces = ""; 
    for (int i = 0; i < s.length(); i++) { 
     if (s.charAt(i) != ' ') 
      withoutspaces += s.charAt(i); 

    } 
    return withoutspaces; 

} 

Đây là đơn giản nhất và thẳng nhất phương pháp mong muốn loại bỏ không gian từ một String.

-3
String a="string with    multi spaces "; 

String b= a.replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," "); 

// cho nó hoạt động tốt với bất kỳ không gian

+0

Thao tác này không xóa toàn bộ khoảng trắng. Nó không hoạt động trên các không gian lớn. Nó không tận dụng các phương pháp tích hợp để xử lý các không gian. Hầu hết tất cả, nó không giải quyết vấn đề với mã của người dùng. Đây là bài tập về nhà: loại bỏ giải pháp ban đầu của học sinh không phục vụ đúng mục đích giảng dạy, trừ khi giải pháp đó là thiếu sót nghiêm trọng. – Prune

-1
String a="string with    multi spaces "; 
//or this 
String b= a.replaceAll("\\s+"," "); 

String c= a.replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," "); 

// cho nó hoạt động tốt với bất kỳ không gian

* đừng quên không gian trong sting b

+0

Sử dụng liên kết [chỉnh sửa] để chỉnh sửa câu trả lời của bạn thay vì đăng câu trả lời mới. –

-2
boolean flag = true; 
while(flag) { 
    s = s.replaceAll(" ", ""); 
    if (!s.contains(" ")) 
     flag = false; 
} 
return s; 
17

Cách trực quan nhất để thực hiện việc này mà không cần sử dụng literals hoặc regular expressions:

yourString.replaceAll(" ",""); 
Các vấn đề liên quan