我有一个StringBuilder与XML文件的内容.XML文件内部是一个名为的根标记<root>,包含多个<node>标记.
我想解析XML以读取s中的标签值,但不知道如何做.
我是否必须使用一些C#XML数据类型?
提前致谢
看完之后 - '同步'是什么意思?我仍然无法理解为什么在线程安全的环境中StringBuffer比StringBuilder慢.StringBuffer必须做多少耗时的工作才能让它变慢?
java stringbuilder synchronization stringbuffer thread-safety
似乎C++/CX没有StringBuilder类或等价的,所以我认为我们是为了这个而使用STL?
这是我的第一个 C++/CX应用程序.用户在TextBox中输入一些文本,点击ENTER按钮,文本被附加到TextBlock"控制台".这段代码确实有效,但最佳做法是什么?
public ref class MainPage sealed
{
public:
MainPage();
protected:
virtual void OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs^ e) override;
private:
std::wstring _commandLine;
std::wstring _consoleText;
void Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
};
Run Code Online (Sandbox Code Playgroud)
...
void HelloConsole::MainPage::Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
this->_commandLine = this->InputLine->Text->Data();
this->_commandLine.append(L"\n");
this->_consoleText += this->_commandLine;
this->InputLine->Text = "";
this->OutputConsole->Text = ref new Platform::String(_consoleText.c_str());
}
Run Code Online (Sandbox Code Playgroud) 好的,所以我试图在表单中创建一个像文本框一样的"控制台",但是一旦你到达底部,可以向上滚动,它只会删除顶线,我有一些困难.到目前为止,当它达到最低点时,它会删除顶线,但只有一次,它只是正常运行.这是我的功能:
StringBuilder sr = new StringBuilder();
public void writeLine(string input)
{
string firstline = "";
int numLines = Convert.ToString(sr).Split('\n').Length;
if (numLines > 15) //Max Lines
{
sr.Remove(0, Convert.ToString(sr).Split('\n').FirstOrDefault().Length);
}
sr.Append(input + "\r\n");
consoleTxtBox.Text = Convert.ToString(sr) + numLines;
}
Run Code Online (Sandbox Code Playgroud)
如果有人能解决这个问题会很好,谢谢
卢卡斯
我知道这里发布了很多类似的问题,但这些问题并没有真正回答我的问题.
我只是想知道为什么StringBuilder比使用+运算符的字符串连接快得多.即使+操作员内部是使用StringBuffer或者StringBuilder?
public void shortConcatenation(){
long startTime = System.currentTimeMillis();
while (System.currentTimeMillis()-startTime<=1000){
character+="Y";
}
System.out.println("short :"+character.length());
}
Run Code Online (Sandbox Code Playgroud)
////使用String builder
public void shortConcatenation2(){
long startTime = System.currentTimeMillis();
StringBuilder sb = new StringBuilder();
while (System.currentTimeMillis()-startTime<=1000){
sb.append("Y");
}
System.out.println("string builder short :"+sb.length());
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我在比较C#(XNA)中的两个StringBuilder时遇到了一个小问题.
StringBuilder sb1;
StringBuilder sb2;
Run Code Online (Sandbox Code Playgroud)
两者都在我的代码的不同部分初始化.一个简单的Console.WriteLine显示它们包含相同的文本.但是,以下是错误的:
sb1.Equals(sb2); // This is false
Run Code Online (Sandbox Code Playgroud)
然而以下是真实的
sb1.ToString().Equals(sb2.ToString); // This is true
Run Code Online (Sandbox Code Playgroud)
怎么会发生这种情况?
我需要在同一个地方替换不同内容的大字符串的一些内容.
让我们说我有一个字符串:
String str = "package blah.foo.bar;\n"
+ "import org.blah.blah;\n"
+ "import sel.this.that;\n"
+ "import sel.boo.foo;\n"
+ "...more text";
Run Code Online (Sandbox Code Playgroud)
我想将这个单词gen插入到以开头import sel.为止的语句中,以便最终结果如下:import sel.gen.this.that;
我已经成功使用以下方法,但只有当我知道子字符串在字符串中的位置时.我的问题是,我不确定如何使以下代码动态:
private String modifyString(String str){
String hold = str.substring(0, str.indexOf(";"));
hold = new StringBuilder(hold).insert(13, "gen.").toString();
str = str.replace("(?m)^package.*", hold);
return str;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码正确替换字符串package blah.foo.bar;用package blah.gen.foo.bar;
但这又一次只能替换字符串的开头部分.我希望能够保存子字符串的所有实例,然后在这些子字符串中插入子字符串.
All.I有一个像这样的java代码片段:
String a = new StringBuilder("app").append("le").toString();
System.out.println(a.intern() == a);
String b = new StringBuilder("orange").toString();
System.out.println(b.intern() == b);
Run Code Online (Sandbox Code Playgroud)
这个java代码将输出true,false.我想知道为什么.谢谢大家.
今天我正在阅读Antonio的博客关于toString()的表现,还有一段:
曾经被认为是邪恶的昨天("不要用+ !!!连接字符串"),已经变得很酷和高效!今天,JVM将+符号编译为字符串构建器(在大多数情况下).所以,不要犹豫,使用它.
现在我很困惑,因为他说今天JVM将+符号编译成字符串构建器(在大多数情况下),但我以前从未听过或看过(代码)这样的事情.
有人可以举例说明JVM是做什么的,以及它在什么条件下发生?
我有以下程序,我必须将字符串附加到另一个字符串,我使用字符串构建器以标准方式执行.但是,ab即使在我转换它之后, 该功能也不允许我返回toString().我想问为什么?
import java.util.*;
public class prog1 {
public static String k(int i) {
String a = "1";
StringBuilder ab = new StringBuilder();
int pos = 1;
if (i == 1) {
return a;
}
else{
pos++;
String first = Integer.toString(pos);
ab.append(a).insert(0,first);
ab.toString();
return ab;
}
}
public static void main (String[]args){
k(2);
}
}
Run Code Online (Sandbox Code Playgroud) stringbuilder ×10
java ×6
string ×5
c# ×3
c++-cx ×1
equals ×1
function ×1
jvm ×1
performance ×1
regex ×1
stringbuffer ×1
substring ×1
tostring ×1
windows-8 ×1
xml ×1