2009-02-01 34 views
5

Tôi đang cố gắng tạo một phương thức trả về một chuỗi các từ theo thứ tự ngược lại.Trả lại một chuỗi được nhập dưới dạng văn bản đảo ngược trong Java

IE/"Mưa ở Tây Ban Nha rơi chủ yếu vào" sẽ trở lại: "về chủ yếu rơi Tây Ban Nha trong mưa Các"

Đối với điều này tôi không được phép sử dụng bất kỳ được xây dựng trong các lớp Java Java chỉ là cơ bản .

Cho đến nay tôi có:

lastSpace = stringIn.length(); 

    for (int i = stringIn.length() - 1; i >= 0; i--){ 
     chIn = stringIn.charAt(i); 
     if (chIn == ' '){ 
      word = stringIn.substring(i + 1, lastSpace); 
      stringOut.concat(word); 
      lastS = i; 
     } 
    } 
    word = stringIn.substring(0,lastSpace); 
    stringOut.concat(word); 

    return stringOut; 

Vấn đề của tôi là khi stringOut được trả lại cho người gọi nó nó luôn luôn là một chuỗi trống.

Tôi có làm gì sai không? Có thể tôi sử dụng string.concat()?

+0

Ý anh là gì của bạn phải chỉ sử dụng được xây dựng trong các lớp học java? – ecleel

Trả lời

8

Trong Java, Chuỗi không thay đổi được, tức là chúng không thể thay đổi. concat() trả về một chuỗi mới có nối. Vì vậy, bạn muốn một cái gì đó như thế này:

stringOut = stringOut.concat(word); 

hoặc

stringOut += word 

như ghi chú Ray, có những cách gọn gàng hơn để làm điều này mặc dù.

0

Đó là bởi vì bạn cần phải gán sự trở lại của concat để một cái gì đó:

stringOut=stringOut.concat(word) 

Strings trong Java (và .net) là không thay đổi.

1

Bạn sẽ làm tốt hơn nếu bạn sử dụng phương thức indexOf của lớp String, thay vì vòng lặp đó để tìm mỗi không gian.

-2

Tôi cảm thấy như mã hóa, vì vậy ở đây bạn đi:

 

import java.util.*; 

class ReverseBuffer { 
    private StringBuilder soFar; 
    public ReverseBuffer() { 
     soFar = new StringBuilder(); 
    } 

    public void add(char ch) { 
     soFar.append(ch); 
    } 

    public String getReversedString() { 
     String str = soFar.toString(); 
     soFar.setLength(0); 
     return str; 
    } 
} 

public class Reverso { 
    public static String[] getReversedWords(String sentence) { 
     ArrayList < String > strings = new ArrayList < String >(); 
     ReverseBuffer rb = new ReverseBuffer(); 
     for(int i = 0;i < sentence.length();i++) { 
      char current = sentence.charAt(i); 
      if(current == ' ') { 
       strings.add(rb.getReversedString()); 
      } 
      else { 
       rb.add(current); 
      } 
     } 
     strings.add(rb.getReversedString()); 
     Collections.reverse(strings); 
     return (String[])strings.toArray(new String[0]); 
    } 

    public static void main(String[] args) { 
     String cSentence = "The rain in Spain falls mostly on the"; 
     String words[] = Reverso.getReversedWords(cSentence); 
     for(String word : words) { 
      System.out.println(word); 
     } 
    } 
} 

EDIT: đã phải gọi getReversedString một lần nữa sau khi vòng lặp.

Hy vọng điều này sẽ hữu ích!

2
public String reverseWords(String words) 
{ 
    if(words == null || words.isEmpty() || !words.contains(" ")) 
    return words; 

    String reversed = ""; 
    for(String word : words.split(" ")) 
    reversed = word + " " + reversed; 

    return reversed.trim(); 
} 

Chỉ API được sử dụng là String (mà phải được phép khi thao tác Strings ...)

+0

Tốt, nhưng phải là "return reversed.trim();" hoặc thêm một số quy tắc cho lần lặp đầu tiên kể từ khi bạn thêm ký tự khoảng trắng ở cuối vào đó. –

1
public String reverseString(String originalString) 
    { 
    String reverseString=""; 
    String substring[]=originalString.split(" ");// at least one space between this double      //quotes 

    for(int i=(substring.length-1);i>=0;i--) 
     { 
     reverseString = reverseString + substring[i]; 
     } 

     return sreverseString; 
    } 
Các vấn đề liên quan