我最近读过它StringWriter并StringReader用于写作和阅读StringBuilder.
好吧,当我使用StringBuilderObject时,它看起来是一个自给自足的类.
我们的阅读和写作的各种方式StringBuilder,使用
StringBuilder.Append(),Insert(),Replace(),Remove()等...
StringWriter和StringReader,它StringBuilder本身不能完成?Stream作为输入(因为任何其他编写器和读取器都将流作为Constructor参数进行操作)但是StringBuilder?使用JNLP,我有这条线:
File_Save_Service.saveFileDialog(null,null,new StringBufferInputStream("testing"),null);
Run Code Online (Sandbox Code Playgroud)
如何在此行中使用StringReader替换StringBufferInputStream?StringBufferInputStream的API说更好用StringReader,但如何在不同类型之间进行转换?
我使用a StringReader将字符串转换为可以上传到SFTP服务器的字符串(它需要一个流).StringReader事后关闭是否有任何意义?据我所知,它只是将字符串设置为null......
我可以做到这一点,但是因为close方法被标记为抛出一个IOException而且我必须将它包装在try catch中并且代码最终看起来比它可能需要的更加可怕.
我正试图将我的StringReader背部转换为常规String,如图所示:
String string = reader.toString();
Run Code Online (Sandbox Code Playgroud)
但是当我尝试读出这个字符串时,就像这样:
System.out.println("string: "+string);
Run Code Online (Sandbox Code Playgroud)
我得到的只是一个指针值,如下所示:
java.io.StringReader@2c552c55
Run Code Online (Sandbox Code Playgroud)
我在读回字符串时做错了吗?
我试图通过套接字读取从外部接口收到的一些XML.问题是XML头中的编码指定错误(它表示iso-8859-1,但它是utf-16BE).据记载,编码是utf-16BE,但显然他们忘记设置正确的编码.
要在反序列化时忽略编码,我使用如下的StringReader:
private static T DeserializeXmlData<T>(byte[] xmlData)
{
var xmlString = Encoding.BigEndianUnicode.GetString(xmlData);
using (var reader = new StringReader(xmlString))
{
reader.ReadLine(); // Eat header line
using (var xmlReader = XmlReader.Create(reader))
{
var serializer = new XmlSerializer(typeof(T));
return (T)serializer.Deserialize(xmlReader);
}
}
}
Run Code Online (Sandbox Code Playgroud)
以上实际上工作正常,但我不喜欢通过调用ReadLine跳过标题行的部分.是否有一种不那么脆弱的方法来绕过XML标头中指定的编码?
使用StreamReader解决方案
通过使用StreamReader,我可以覆盖XML头中指定的编码.指定XmlReaderSettings.IgnoreProcessingInstructions与否没有任何区别.有趣的是,如果StreamReader找到unicode字节顺序标记,则忽略指定的编码.
回顾一下:
总之,最强大的解决方案似乎是使用StreamReader,因为它使用字节顺序标记(如果存在).
private static T DeserializeXmlData<T>(byte[] xmlData)
{
using (var xmlDataStream = new MemoryStream(xmlData))
{
using (var reader = new StreamReader(xmlDataStream, Encoding.BigEndianUnicode))
{
using (var xmlReader = XmlReader.Create(reader))
{
var serializer …Run Code Online (Sandbox Code Playgroud) 今天我正在使用Java类StringReader,我发现它在read方法上抛出IOException非常烦人.我知道它扩展了Reader类在哪个方法read抛出IOException,但我认为StringReader不需要它.此类不使用任何可能导致错误的外部资源.
短暂调查后,我发现,StringReader#read抛出IOException如果字符串,这个类读取为空,但事实上这是不可能发生的,因为如果我们将试图传递null StringReader构造器,它抛出NPE.
您如何看待它,总是抛出与超类相同的异常是一种好习惯吗?
编辑:如U Mad Reader所述,是一个不是接口的类.
我想逐行读取文本文件并编辑特定行。因此,我将文本文件放入字符串变量中,例如:
string textFile = File.ReadAllText(filename);
我的文本文件如下:
Line A
Line B
Line C
Line abc
Line 1
Line 2
Line 3
Run Code Online (Sandbox Code Playgroud)
我有一个特定的字符串(=“abc”),我想在此文本文件中搜索它。因此,我正在阅读这些行,直到找到字符串并在找到字符串之后转到第三行(“第 3 行”-> 该行始终不同):
string line = "";
string stringToSearch = "abc";
using (StringReader reader = new StringReader(textFile))
{
while ((line = reader.ReadLine()) != null)
{
if (line.Contains(stringToSearch))
{
line = reader.ReadLine();
line = reader.ReadLine();
line = reader.ReadLine();
//line should be cleared and put another string to this line.
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想清除第三个读取行并将另一个字符串放入该行并将整个保存string到textFile.
我怎样才能做到这一点?
我有这个功能:
private Node getDOM(String str) throws SearchEngineException {
DOMResult result = new DOMResult();
try {
XMLReader reader = new Parser();
reader.setFeature(Parser.namespacesFeature, false);
reader.setFeature(Parser.namespacePrefixesFeature, false);
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(new SAXSource(reader,new InputSource(new StringReader(str))), result);
} catch (Exception ex) {
throw new SearchEngineException("NukatSearchEngine.getDom: " + ex.getMessage());
}
return result.getNode();
}
Run Code Online (Sandbox Code Playgroud)
它需要一个String,它包含一个POST请求后由http服务器发送的html文档,但无法正确解析它 - 我只得到整个文档中的四个节点.字符串本身看起来很好 - 如果我将其打印出来并将其复制到文本文档中,我会看到我期望的页面.
当我使用上述方法的重载版本时:
private Node getDOM(URL url) throws SearchEngineException {
DOMResult result = new DOMResult();
try {
XMLReader reader = new Parser();
reader.setFeature(Parser.namespacesFeature, false);
reader.setFeature(Parser.namespacePrefixesFeature, false);
Transformer transformer = …Run Code Online (Sandbox Code Playgroud) 我有3个TextReaders - StreamReaders和StringReaders的组合.从概念上讲,它们的串联是单个文本文档.
我想调用一个带有单个TextReader的方法(不在我的控制之下).是否有任何内置或简单的方法可以从多个TextReader中连接TextReader?
(我可以编写自己的TextReader子类,但看起来工作量相当大.在这种情况下,我只需将它们全部写入临时文件,然后使用单个StreamReader打开它.)
有一个简单的解决方案,我错过了吗?
我有这个问题,我正在使用StringReader从文本框中查找特定的单词,到目前为止工作得很好,但是我需要找到一种方法来检查每一行中对应字符串数组的特定单词.
以下代码有效:
string txt = txtInput.Text;
string user1 = "adam";
int users = 0;
int systems = 0;
using (StringReader reader = new StringReader(txt))
{
while ((txt = reader.ReadLine()) != null)
{
if (txt.Contains(user1))
{
users++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我创建了一个String Array来存储多个字符串,但Contains方法似乎只接受一个字符串.
string[] systemsarray = new string[] { "as400", "x500", "mainframe" };
if(txt.Contains(systemsarray))
{
systems++;
}
// error message: cannot convert from string[] to string
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何做到这一点,或改善它的方法?
提前致谢.
stringreader ×10
java ×5
c# ×4
string ×3
.net ×2
api ×1
arrays ×1
c#-3.0 ×1
streamreader ×1
stringwriter ×1
tag-soup ×1
textreader ×1
tostring ×1
xml ×1