2013-07-19 14 views
12

मैं दिखाया गया है एक नियमित रूप से String वापस करने के लिए मेरी StringReader कन्वर्ट करने के लिए, कोशिश कर रहा हूँ:मैं स्ट्रिंगरडर को स्ट्रिंग में कैसे परिवर्तित करूं?

String string = reader.toString(); 

लेकिन जब मैं, इस स्ट्रिंग बाहर पढ़ने की कोशिश इस तरह:

System.out.println("string: "+string); 

सभी मैं है एक सूचक मूल्य, इस तरह:

[email protected] 

क्या मैं स्ट्रिंग को वापस पढ़ने में कुछ गलत कर रहा हूं?

+5

स्पष्ट रूप से, आप हैं। http://docs.oracle.com/javase/7/docs/api/java/io/StringReader.html –

+1

आप स्ट्रिंग रीडर से स्ट्रिंग को वापस पढ़ने के बिना नहीं प्राप्त कर सकते हैं ( – hexafraction

उत्तर

9

StringReader की toString विधि StringReader आंतरिक बफर वापस नहीं करती है।

इसे प्राप्त करने के लिए आपको StringReader से पढ़ने की आवश्यकता होगी।

मैं पढ़ने के अधिभार का उपयोग करने की सलाह देता हूं जो एक वर्ण सरणी स्वीकार करता है। थोक पाठ एकल वर्ण पढ़ने से तेज़ होते हैं।

यानी।

//use string builder to avoid unnecessary string creation. 
StringBuilder builder = new StringBuilder(); 
int charsRead = -1; 
char[] chars = new char[100]; 
do{ 
    charsRead = reader.read(chars,0,chars.length); 
    //if we have valid chars, append them to end of string. 
    if(charsRead>0) 
     builder.append(chars,0,charsRead); 
}while(charsRead>0); 
String stringReadFromReader = builder.toString(); 
System.out.println("String read = "+stringReadFromReader); 
0

आप वास्तविक StringReader वस्तु की toString() बाहर प्रिंट कर रहे, String कि StringReader पढ़ रही है की नहीं सामग्री।

आपको स्ट्रिंग में वास्तविक वर्ण पढ़ने के लिए read() और/या read(char[] cbuf, int off, int len) विधियों का उपयोग करने की आवश्यकता है।

1

reader.toString(); आप Object वर्ग से सामान्य toString() विधि बुला के परिणाम दे देंगे। यदि आप एक StringReader वस्तु में विधि toString() का उपयोग करते हैं आप वस्तु की स्मृति स्थिति प्रिंट होगा

int i;    
do { 
    i = reader.read(); 
    char c = (char) i; 
    // do whatever you want with the char here... 

} while (i != -1); 
+0

एक सरणी के साथ एक थोक पढ़ा जाएगा एक समय में एक ही चरित्र को पढ़ने से तेज हो। –

0

:

आप read() विधि का उपयोग कर सकते हैं। आपने इस विधि में से एक का उपयोग किया है:

read() एक एकल वर्ण पढ़ता है।

read(char[] cbuf, int off, int len) वर्णों को एक सरणी के एक हिस्से में पढ़ता है।

एक उदाहरण यहाँ:

 String s = "Hello World"; 

    // create a new StringReader 
    StringReader sr = new StringReader(s); 

    try { 
     // read the first five chars 
     for (int i = 0; i < s.length(); i++) { 
      char c = (char) sr.read(); 
      System.out.print("" + c); 
     } 

     // close the stream 
     sr.close(); 

    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
1

कॉलिंग toString() विधि StringReader वर्ग की वस्तु दे देंगे। अगर यो चाहते हैं कि उसे सामग्री दी गई है तो आप इस तरह StringReader पर पढ़ने विधि कॉल करने की जरूरत है:

public class StringReaderExample { 

    public static void main(String[] args) { 

     String s = "Hello World"; 

     // create a new StringReader 
     StringReader sr = new StringReader(s); 

     try { 
     // read the first five chars 
     for (int i = 0; i < 5; i++) { 
      char c = (char) sr.read(); 
      System.out.print("" + c); 
     } 

     // close the stream 
     sr.close(); 

     } catch (IOException ex) { 
     ex.printStackTrace(); 
     } 
    } 
} 

ट्यूटोरियल के लिए आप इस link उपयोग कर सकते हैं।

20
import org.apache.commons.io.IOUtils; 

String string = IOUtils.toString(reader); 
4

या Googles अमरूद पुस्तकालय से CharStreams का उपयोग कर:

CharStreams.toString(stringReader); 
3

आप बाहरी पुस्तकालयों का उपयोग नहीं करना चाहते हैं:

Scanner scanner = new Scanner(reader).useDelimiter("\\A"); 
String str = scanner.hasNext() ? scanner.next() : ""; 

hasNext() जांच करने के लिए कारण यह है कि एक साथ next() फट NoSuchElementException यदि पाठक रिक्त (शून्य-लंबाई) स्ट्रिंग को लपेटता है।

संबंधित मुद्दे

 संबंधित मुद्दे