在我的应用程序中,我使用StringBuilder使用此代码构建XML文件:
StringBuilder sb = new StringBuilder();
sb.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + Environment.NewLine);
sb.Append(String.Format("<{0}>{1}", _pluralCamelNotation, Environment.NewLine));
for (int index = 0; index < 3; index++)
{
sb.Append(String.Format("\t<{0}>{1}", _singularCamelNotation, Environment.NewLine));
foreach (DataType dataType in _allDataTypes)
{
sb.Append(String.Format("\t\t<{0}>{2}</{0}>{1}", dataType.CamelCaseNotation, Environment.NewLine, dataType.GetDummyData()));
}
sb.Append(String.Format("\t</{0}>{1}", _singularCamelNotation, Environment.NewLine));
}
sb.Append(String.Format("</{0}>{1}", _pluralCamelNotation, Environment.NewLine));
return sb.ToString();
Run Code Online (Sandbox Code Playgroud)
如何使用LINQ执行相同的操作,如下所示:
PSEUDO-CODE:
var xdoc = new XDocument(
new XDeclaration("1.0", "utf-8", null),
for (int index = 0; index < 3; index++) {
new XElement(_pluralCamelNotation,
_allDataTypes.Select(datatype => new XElement(_singularCamelNotation,
new XElement(datatype.CamelCaseNotation, …Run Code Online (Sandbox Code Playgroud) 所以这就是我正在使用的东西.我正在尝试获取XML文件,从属性中提取信息,将它们附加在一起,然后将其写入CSV文件.我还是比较新的编程,而另一个程序员今天不在办公室,所以我真的可以使用一些帮助.
我的第一个问题,关于StringBuilder.我是否需要在StringBuilder的末尾添加一个AppendLine,以便foreach循环中的每个字符串输出都在一个新行上?我是否需要在foreach循环中执行此操作?
我的第二个问题是实际上将我的字符串写入CSV文件.它看起来像什么?
swOutputFile.WriteLine(strAppendedJobData)
Run Code Online (Sandbox Code Playgroud)
我认为这也会进入foreach循环,但我不太确定.
感谢您的帮助,我希望我以一种易于理解的方式表达我的问题.
//Create a stream writer to write the data from returned XML job ticket to a new CSV
StreamWriter swOutputFile;
string strComma = ",";
swOutputFile = new StreamWriter(new FileStream("C:\\Dev\\AppendedJobData.csv", FileMode.Create, FileAccess.Write, FileShare.Read));
//Get nodes from returned XML ticket
XmlNodeList xmlJobs = xdResults.SelectNodes("/Updates/Jobs/Job");
//Pull out data from XML attributes
foreach (XmlElement xeJobUpdate in xmlJobs)
{
//Break down the job data
string strProjectID = xeJobUpdate.GetAttribute("SharpOwlProjectID");
string strJobNumber = xeJobUpdate.GetAttribute("JobNumber");
string strClientCode = xeJobUpdate.GetAttribute("SharpOwlClientCode");
string strClient = xeJobUpdate.GetAttribute("Client"); …Run Code Online (Sandbox Code Playgroud) 我试图在C#中动态创建一个StringBuilder数组,我没有太多运气.
我想根据给定的客户端数字向StringBuilder(sb)添加信息,该数字将根据我可能拥有的客户端数量动态变化.我可能有2个或者我可能有20个.sb将用于在我的程序中稍后为每个客户端构建一个报告.
例如,我有以下3个客户:
Client A = 0
Client B = 1
Client C = 2
Run Code Online (Sandbox Code Playgroud)
如果客户A报告他有8个苹果,我想将字符串"8 apples"添加到sb [0].
如果客户B报告他有3个橙子我想将字符串"3 oranges"添加到sb [1].
以上只是我想要实现的想法的一个简单例子.实际上,我将向某人添加大量信息.
我已经尝试过以下运动,但没有太多运气让他们以我期望或想要的方式工作.
StringBuilder[] sbFileError = new StringBuilder[clientCount];
List<StringBuilder> sbFileError = new List<StringBuilder>();
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?是否可以创建StringBuilder数组?
谢谢!
伙计我在我的小java实用程序中打印了很多日志,所以只想到这个问题,如果它是一个非常大的系统和效率很重要,并且如果我们生成了很多日志(使用log4j)这是更好的对象来保存记录消息String或StringBuilder.
我有一个奇怪的问题.这是代码:
public class TaxiDetails extends Activity{
ArrayList<Bus> listBus = new ArrayList<Bus>();
ArrayList<Taxi> listTaxi = new ArrayList<Taxi>();
TextView detalji, title;
ImageView backBtn;
String strType;
StringBuilder builder = new StringBuilder();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.numbers_details);
detalji = (TextView) findViewById(R.id.txtNumbDetails);
title = (TextView) findViewById(R.id.txtTitleNumbers);
detalji.setTypeface(Typeface.DEFAULT_BOLD);
Typeface TF = Typeface.createFromAsset(getAssets(), "fonts/Roboto-Black.ttf");
backBtn = (ImageView) findViewById(R.id.backBtn);
title.setTypeface(TF);
Intent in = getIntent();
strType = in.getStringExtra("type");
if (strType.equals("TAXI")){
listTaxi = (ArrayList<Taxi>) in.getSerializableExtra("TAXI");
title.setText("Taxi");
} else if (strType.equals("BUS")){
listBus = (ArrayList<Bus>) in.getSerializableExtra("BUS");
title.setText("BUS");
}
if …Run Code Online (Sandbox Code Playgroud) 我有一个方法从sdcard(Android)加载文件,然后使用StringBuilder读取它.我正在阅读的文本是用我的母语字符写的,例如ąźż... StringBuilder(或FileInputStream)不能正确地读取它们.我如何设置正确的编码?
这是代码:
File file = new File(filePath);
FileInputStream fis = null;
StringBuilder builder = new StringBuilder();
try {
fis = new FileInputStream(file);
int content;
while ((content = fis.read()) != -1) {
builder.append((char) content);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null)
fis.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
System.out.println("File Contents = " + builder.toString());
contactService.updateContacts(builder.toString());
Run Code Online (Sandbox Code Playgroud) 告诉我这个代码C#有什么问题.
string str = string.Empty;
for (var i = 1; i <= 1000; i++)
str += i.ToString();
Run Code Online (Sandbox Code Playgroud)
这是面试问题.
我测试了一个简单的连接:
string res = "";
for (var i = 0; i < 1000; i++)
{
res += mystring;
}
return res;
Run Code Online (Sandbox Code Playgroud)
另一个使用StringBuilder对象:
StringBuilder builder = new StringBuilder();
for (var i = 0; i < 1000; i++)
{
builder.Append(mystring);
}
return builder.ToString();
Run Code Online (Sandbox Code Playgroud)
循环越大,使用StringBuilder的性能越好.
我想知道这个结果的真正原因,我的意思是,创建,实现一个对象,调用方法的事实比简单的"string1 + string2"更快?
现在我正在开发一个关于Java的简单项目.我在String Builder中附加并在控制台上打印字符串.当我尝试将字符串数组追加到字符串生成器中时,它会在控制台上打印对象而不是字符串数组.告诉我的尝试是对还是错.
我在Java中有以下代码.
String foo = " ";
Run Code Online (Sandbox Code Playgroud)
方法1:
StringBuffer buf = new StringBuffer();
buf.append("Hello");
buf.append(foo);
buf.append("World");
Run Code Online (Sandbox Code Playgroud)
方法2:
StringBuffer buf = new StringBuffer();
buf.append("Hello").append(foo).append("World");
Run Code Online (Sandbox Code Playgroud)
有人可以启发我,方法2如何才能提高代码的性能?
https://pmd.github.io/pmd-5.4.2/pmd-java/rules/java/strings.html#ConsecutiveAppendsShouldReuse
stringbuilder ×10
c# ×5
java ×4
string ×4
arrays ×2
stringbuffer ×2
android ×1
asp.net ×1
c#-4.0 ×1
csv ×1
encoding ×1
file ×1
for-loop ×1
format ×1
linq ×1
log4j ×1
performance ×1
pmd ×1
streamwriter ×1
tostring ×1