有一个词,我要用一些特定的字母替换一些特定的字母,例如1代表a,5代表b等等.我正在使用正则表达式.我知道StringBuilder是处理这个问题的最佳方法,因为我正在进行大量的字符串操作.这是我正在做的事情:
String word = "foobooandfoo";
String converted = "";
converted = word.replaceAll("[ao]", "1");
converted = converted.replaceAll("[df]", "2");
converted = converted.replaceAll("[n]", "3");
Run Code Online (Sandbox Code Playgroud)
我的问题是如何使用StringBuilder重写该程序.我尝试了一切,但我不能成功.或者使用String就可以了吗?
如何递归地将toString方法中的所有catenations替换为StringBuilder for Java?eclipse中有这样的插件吗?例如:替换它:
return "AccountAddresses ["
+ ", corporateAddresses=" + CommonHelper.isNotNull(corporateAddresses)
+ ", corporateDeliveryMinimum=" + corporateDeliveryMinimum
+ ", depot=" + CommonHelper.isNotNull(depot)
+ ", depotDeliveryMinimum=" + depotDeliveryMinimum
+ ", preSelectedId=" + preSelectedId
+ ", residentialAddresses=" + CommonHelper.isNotNull(residentialAddresses)
+ ", residentialDeliveryMinimum=" + residentialDeliveryMinimum
+ "]";
Run Code Online (Sandbox Code Playgroud)
在这:
return new StringBuilder("AccountAddresses [")
.append(", corporateAddresses=").append(CommonHelper.isNotNull(corporateAddresses))
.append(", corporateDeliveryMinimum=").append(corporateDeliveryMinimum)
.append(", depot=").append(CommonHelper.isNotNull(depot))
.append(", depotDeliveryMinimum=").append(depotDeliveryMinimum)
.append(", preSelectedId=").append(preSelectedId)
.append(", residentialAddresses=").append(CommonHelper.isNotNull(residentialAddresses))
.append(", residentialDeliveryMinimum=").append(residentialDeliveryMinimum)
.append("]").toString();
Run Code Online (Sandbox Code Playgroud) 这应该是一个快速的.我有一个像这样的StringBuilder:
StringBuilder sb = new StringBuilder();
Run Code Online (Sandbox Code Playgroud)
我像这样附加到我的StringBuilder:
sb.Append("Foo");
sb.Append("Bar");
Run Code Online (Sandbox Code Playgroud)
然后我想让它等于一个字符串变量.我这样做是这样的:
string foobar = sb;
Run Code Online (Sandbox Code Playgroud)
或者像这样:
string foobar = sb.ToString();
Run Code Online (Sandbox Code Playgroud)
前者是懒惰还是后者添加的代码多于必要的?
谢谢
我尝试StringBuilder使用该replace方法替换一些字符串,但不幸的是它像insert方法一样运行.
这是一些代码:
public class StringBuilderReplace {
public static void main(String[] args) {
StringBuilder builder = new StringBuilder();
builder.append("Line 1\n");
builder.append("Line 2\n");
builder.append("Line 3\n");
builder.replace(builder.indexOf("Line 2"), builder.indexOf("Line 2"), "Temporary Line\n");
System.out.println(builder.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
此代码的结果:
Line 1
Temporary Line
Line 2
Line 3
Run Code Online (Sandbox Code Playgroud)
我想要的是:
Line 1
Temporary Line
Line 3
Run Code Online (Sandbox Code Playgroud)
怎么做才能得到我想要的结果?
根据AljoshaBre答案更新
如果我像这样更改代码,它可以工作:
builder.replace(builder.indexOf("Line 2"), builder.indexOf("Line 3"), "Temporary Line\n");
Run Code Online (Sandbox Code Playgroud)
但是出现了新问题,如果下一个字符串(对于这个例子Line 3)我不知道内容怎么办?
以下Jsoup代码连接容器中所有元素的文本els:
for (Element el : els)
entireText += el.text();
Run Code Online (Sandbox Code Playgroud)
在一个包含~64个元素的容器中,每个元素包含~1KB(整个文本总共约为64KB),这个简单的循环在典型的低端Android手机上大约需要8秒.
这种缓慢的性能样的惊喜我,因为我的印象是,Java编译像替代表情下A + B + C用new StringBuilder(A).append(B).append(C).toString().
那不是这样吗?
我错过了什么?
我正在Spring Controller中编写一个私有实用程序方法.
我需要使用StringBuffer或者StringBuilder.前者是线程安全的,后者不是,但后者要快得多.
基本上,它看起来像这样:
private String buildTextToDisplay() {
StringBuffer sb = new StringBuffer();
sb.append( ... );
return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
显然,我不希望两个会话同时调用它并返回垃圾.
java stringbuilder multithreading stringbuffer thread-safety
我有一个XML文件,我需要在其中搜索特定的标签并更新它的值.问题是,使用Sax解析器是"必须".我必须使用Sax Parser"only"找到这些标签,dom stax j4dom dom4j解析器不在考虑范围内.
我可以通过将我的xml文件转换为字符串并使用sax解析器解析它并按StringBuilder对象追加新值来完成此任务吗?会没事吗?或者你会推荐什么?
好吧,所以我有一个<tr>表格是用字符串构建的,看起来像这样:13467
1= monday
2= tuesday
...
7= sunday
so 13467 = mon,wed,thurs,sat,sun
Run Code Online (Sandbox Code Playgroud)
我的现有代码手动检查字符串,就像这样
if (breakfastDays.Contains("1")) {
sb.Append("<td class=\"active\"> </td>");
mo++;
} else {
sb.Append("<td> </td>");
}
if (breakfastDays.Contains("2")) {
sb.Append("<td class=\"active\"> </td>");
tu++;
} else {
sb.Append("<td> </td>");
}
Run Code Online (Sandbox Code Playgroud)
该class="active"部分只是告诉css检查框.
是否有更简单的方法来进行字符串检查?
也许有些for-in循环可能?
我想知道是否存在一个简单的方法从StringBuilder对象中删除最后一行而不知道最后一行中的字符数.
例:
你好,你好吗?
很好,谢谢!
好的,完美......
我想删除"Ok,Perfect ......"
我正在读取XML文件并使用构建字符串StringBuilder.但有时我Element.Attributes会丢失,在这种情况下,字符串为null.
string key = (string)EventId.Descendants("properties").Elements("ID").Attributes("key").FirstorDefault();
Run Code Online (Sandbox Code Playgroud)
获得所有attribue值后,我正在进行字符串构建:
sb.Append(key.PadRight(33));
Run Code Online (Sandbox Code Playgroud)
但有时值key可以为null,它会产生错误:
在调用方法之前,检查以确定对象是否为null
StringBuilder即使值为null,我想追加空字符串.
stringbuilder ×10
java ×7
c# ×3
.net ×1
contains ×1
html ×1
html-table ×1
jsoup ×1
optimization ×1
performance ×1
replace ×1
sax ×1
string ×1
stringbuffer ×1
tostring ×1
xml ×1