请帮助我理解这段代码有什么问题.(我正在尝试构建一个字符串,从文本文件中逐行获取部分字符串).
我 在行上得到一个运行时错误"在对象引用未设置为对象的实例中"strbuild.Append(str);
StreamReader reader = new StreamReader("buf.txt", System.Text.Encoding.ASCII);
StringBuilder strbuild = new StringBuilder();
strbuild = null;
while (reader.Peek() >= 0)
{
string str = null;
str = reader.ReadLine().ToString();
string segment = str.Substring(0, 1);
if (segment == "A")
{
strbuild.Append(str); //here i get an error
}
else if (segment == "B")
{
strbuild.Append("BET");
}
}
printstr = strbuild.ToString();
reader.Close();
MessageBox.Show(printstr);
Run Code Online (Sandbox Code Playgroud) public class Log {
private static StringBuilder log = new StringBuilder();
private static StringBuilder getLog() {
return log;
}
public static void addToLog(String id, String name, String field, String operator, String value, String bValue) {
Calendar calendar = Calendar.getInstance();
String currentTime = formatter.format(calendar.getTime());
getLog().append(currentTime); // line 114
}
}
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
[java] Exception in thread "Thread-5" java.lang.ArrayIndexOutOfBoundsException
[java] at java.lang.String.getChars(String.java:863)
[java] at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:416)
[java] at java.lang.StringBuilder.append(StringBuilder.java:132)
[java] at com.retroficiency.system.Log.addToMatchingLog(Log.java:114)
Run Code Online (Sandbox Code Playgroud)
这种方法通常工作正常,但我们遇到了这个随机错误,我无法弄清楚为什么.有一个单独的方法可以将日志刷新到文件并使用以下方法清除它:
getLog().delete(0, getMatchingLog().length());
Run Code Online (Sandbox Code Playgroud)
我不认为这是一个Java bug?它变得太长了吗?谢谢你的帮助!
所以要输出一些属性到csv,我正在使用stringbuilder它使用逗号作为逗号的自然分隔符.问题是当我在字符串中添加带逗号的字符串时,它会将它拆分为单独的列.所以对于前
temp.Append("ab,cd,ef")给了我3个单独的专栏.如何将其作为单个列输出,并且逗号完好无损.
这是捕获组的结果
match = Regex.Match(amt, "^\"([\\d,]+),(\\d\\d\\d)\"$");
Run Code Online (Sandbox Code Playgroud)
然后我做了
amt = Convert.ToString(match.Groups[1].Value) + Convert.ToString(match.Groups[2].Value);
Run Code Online (Sandbox Code Playgroud)
所以它需要123,123,123,123之类的逗号,并且我想输出完全相同的东西,最后一个逗号被句号替换.但它仍然会出现
123 123 123 123 123
在单独的列中
我试图绕过循环并将项目附加到StringBuilder.
但是,我无法在循环中做任何事情,我不认为我的循环甚至被访问.
以下是代码:
string initialString = "PRINT OUT PRODUCTS BELOW!\n";
StringBuilder stringBuilder = new StringBuilder(initialString);
for (int i = 0; i < products.Count(); i++)
{
stringBuilder.Append(products.ElementAt(i));
stringBuilder.Append("24");
stringBuilder.Append("36");
}
stringBuilder.Append("45");
return stringBuilder.ToString();
Run Code Online (Sandbox Code Playgroud)
最终的"45"将打印出来,但24或36将不打印.
我正在使用C#中的字符串.我有一个字符串,
StringBuilder sb = new StringBuilder();
sb.AppendLine(ValidatorMethod1());
sb.AppendLine(ValidatorMethod2());
Run Code Online (Sandbox Code Playgroud)
在调用"sb"之后ValidatorMethod1(),我调用a ValidatorMethod2()如图所示,两者都根据条件返回一个错误消息作为字符串.如果ValidatorMethod1()并ValidatorMethod2()返回错误消息,那么一切都很好.但如果ValidatorMethod2()失败,那么从...返回的错误消息的长度ValidatorMethod2(是"0",但仍然有一行附加"sb",因此在ValidatorMethod1()错误消息后添加一个空的错误行.
我试过谷歌搜索,但链接像:
所以请任何人都可以提出一个想法,"如果长度大于零,则将返回的字符串放在换行符中"或什么都不做?
编辑:
大家好,我想我得到了正在寻找的合适解决方案.我不想在每个"sb"之后追加一行.但是,如果我有一个错误消息,那么,我想把它放在NEWLINE中.有人可以给我一个满足我需要的不同解决方案吗?
我有以下方法规范化给定的XML标记名称:
public static String normaliseTagName(String tagName) {
// Return a given empty tag name.
if (tagName.length() == 0) {
return tagName;
}
// Replace invalid start.
if (isInvalidXMLStart(tagName.charAt(0))) {
tagName = XML_REPLACEMENT + tagName;
}
// Replace invalid characters.
StringBuilder normalised;
boolean invalidFound = false;
for (int i = 0; i < tagName.length(); i++) {
if (isInvalidXMLChar(tagName.charAt(i))) {
if (!invalidFound) {
normalised = new StringBuilder(tagName.substring(0, i));
invalidFound = true;
}
normalised.append(XML_REPLACEMENT); // COMPILER ERROR
} else if (invalidFound) {
normalised.append(tagName.charAt(i)); …Run Code Online (Sandbox Code Playgroud) 有没有办法创建像我们创建PreparedStatements的字符串?我的意思是用'?'创建整个字符串 我需要稍后插入值,然后根据条件插入此值.在StringBuilder中,我没有找到这样的功能,只是通过offset附加或插入.
我是C#的新程序员,我想知道是否有从StringBuilder转换为int的直接方法.我有以下代码.在代码的最后一行,我收到一个错误.
StringBuilder newnum = new StringBuilder();
for (int i = x.Length - 1; i >= 0; i--)
{
newnum.Append(x[i]);
}
int x = Convert.ToInt32(newnum);
Run Code Online (Sandbox Code Playgroud) 我有一个单独存储小时,分钟,秒的对象.
public static class ETA {
private int hours; // 2 (single or double digit 24 hour format)
private int minutes; // 0 (single or double digit)
private int seconds; // 0 (single or double digit)
// getters.. setters..
}
Run Code Online (Sandbox Code Playgroud)
我需要将此时间保存到csv文件中,其中包含正确的字符串"02:00:00"格式为HH:mm:ss 和NOT as "2:0:0";
我尝试使用StringBuilder的append()方法,但想出了非常混乱的代码.这是我试过的......
ETA e = new ETA();
StringBuilder time = new StringBuilder();
if (e.getHour() < 10) {
time.append("0" + e.getHour());
} else {
time.append(e.getHour());
}
// similarly for minute and seconds, and …Run Code Online (Sandbox Code Playgroud) 为什么我不能通过LINQ Select()查询将列表中的字符串值插入StringBuilder ?
给定下面的代码,我希望构建的字符串结尾为,{CBA}但实际上是{}。
我想念什么?
var testList = new List<string>
{
"A",
"B",
"C"
};
var testStringBuilder = new StringBuilder("{}");
testList.Select(y => testStringBuilder.Insert(1,y));
Run Code Online (Sandbox Code Playgroud) stringbuilder ×10
c# ×6
java ×4
.net ×1
line-breaks ×1
linq ×1
list ×1
logging ×1
string ×1
winforms ×1