StringBuffer s1= new StringBuffer("Test");
StringBuffer s2 = new StringBuffer("Test");
if(s1.equals(s2)) {
System.out.println("True");
} else {
System.out.println("False");
}
Run Code Online (Sandbox Code Playgroud)
为什么那段代码打印"假"?
在循环遍历StringBuffer时,我需要获取新行的起始位置.假设我在stringbuffer中有以下文档
"This is a test
Test
Testing Testing"
Run Code Online (Sandbox Code Playgroud)
在"测试","测试"和"测试"之后存在新行.
我需要这样的东西:
for(int i =0;i < StringBuffer.capacity(); i++){
if(StringBuffer.chatAt(i) == '\n')
System.out.println("New line at " + i);
}
Run Code Online (Sandbox Code Playgroud)
我知道这不起作用,因为'\n'不是一个角色.有任何想法吗?:)
谢谢
为什么StringBuffer它的尺寸有限制?
我浏览了一些链接:http: //www.coderanch.com/t/540346/java/java/maximum-size-hold-String-buffer.
是因为count成员变量,这是一个int?
假设我们有2 ^ 31-1个字符,StringBuffer并且我们附加了一些字符StringBuffer.计数成员变量将增加附加的字符数,如果计数变量已经达到其最大值(2 ^ 31-1),它将恢复为某个负值.
为什么会抛出错误?
我试图理解为什么 String 和 Stringbuilder/StringBuffer 在用作 Hashmap 键时会受到不同的对待。让我用下面的插图来澄清我的困惑:
示例#1,使用字符串:
String s1 = new String("abc");
String s2 = new String("abc");
HashMap hm = new HashMap();
hm.put(s1, 1);
hm.put(s2, 2);
System.out.println(hm.size());
Run Code Online (Sandbox Code Playgroud)
上面的代码片段打印“1”。
示例#2,使用 StringBuilder(或 StringBuffer):
StringBuilder sb1 = new StringBuilder("abc");
StringBuilder sb2 = new StringBuilder("abc");
HashMap hm = new HashMap();
hm.put(sb1, 1);
hm.put(sb2, 2);
System.out.println(hm.size());
Run Code Online (Sandbox Code Playgroud)
上面的代码片段打印“2”。
谁能解释一下为什么行为不同。
我对“同步”这个术语很困惑,我从java文档中得到了以下信息。
可变的字符序列。此类提供了与 StringBuffer 兼容的 API,但不保证同步。此类设计为在单个线程使用字符串缓冲区的地方(通常是这种情况)用作 StringBuffer 的直接替代品。如果可能,建议优先使用此类而不是 StringBuffer,因为它在大多数实现下会更快。
据我所知,同步与线程及其访问方式有关。
可以说,我有一个 Web 应用程序在其方法之一中使用 StringBuilder,
一个例子将受到高度赞赏。
请注意,我知道多线程访问需要同步,因为它们需要访问相同的数据!我需要一个例子来说明这一点。
我需要替换字符串缓冲区中的多个单词。所以我正在寻找一种replaceAll方法StringBuffer。
那么我们有StringBuffer吗?
字符串方法:
str2 = str1.replaceAll(regex, substr);
// (This is String method, I need like this in StringBuffer)
Run Code Online (Sandbox Code Playgroud) 我有一个带有降价语法的字符串,我希望能够找到标题的降价语法,即 h1 = #、h2 = ## 等。
我知道每当我找到一个标题时,它就在行的开头。我也知道每行只能有一个标题。因此,例如,“###This is a heading”将匹配我的 h3 模式,但不适用于我的 h2 或 h1 模式。到目前为止,这是我的代码:
h1 = Pattern.compile("(?<!\\#)^\\#(\\b)*");
h2 = Pattern.compile("(?<!\\#)^\\#{2}(\\b)*");
h3 = Pattern.compile("(?<!\\#)^\\#{3}(\\b)*");
h4 = Pattern.compile("(?<!\\#)^\\#{4}(\\b)*");
h5 = Pattern.compile("(?<!\\#)^\\#{5}(\\b)*");
h6 = Pattern.compile("(?<!\\#)^\\#{6}(\\b)*");
Run Code Online (Sandbox Code Playgroud)
每当我使用 \\# 时,我的编译器 (IntelliJ) 都会告诉我:“冗余字符转义”。每当我使用 \\# 时它都会这样做。据我所知,# 不应该是正则表达式中的特殊字符,所以用两个反斜杠转义它应该允许我使用它。
当我找到匹配项时,我想用粗体 HTML 标记包围整个匹配项,如下所示:“ ###Heading ”,但由于某种原因它不起作用
//check for heading 6
Matcher match = h6.matcher(tmp);
StringBuffer sb = new StringBuffer();
while (match.find()) {
match.appendReplacement(sb, "<b>" + match.group(0) + "</b>");
}
match.appendTail(sb);
tmp = sb.toString();
Run Code Online (Sandbox Code Playgroud)
编辑
所以我必须单独查看每个标题,我不能以相同的模式查看标题 1-6(这与使用相同模式的程序的其他部分有关)。到目前为止我所知道的:
所以我有一个JTextArea用户输入,然后当他们点击一个按钮,它将它写入文本文件,我有两个setLineWrap并setWrapStyleWord设置true为JTextArea.
我想写文本文件在文本框中显示的确切方式.
我试图replace("\n", System.getProperty("line.separator"))在String保持JTextArea其工作的内容上做一个,但是只有当用户在键入输入时实际点击返回键时,但是如果用户只是继续键入并命中一行的结尾,那么它跳转到它下面的线,replace不起作用.
我也试过使用a StringBuffer,我计算了在线上适合多少个字符,然后在for loop inserting每一行的末尾运行一个新行,所以对于第一行我会将它添加到位置90,第二行180,第三行270等等.但我很快意识到,并非在所有情况下工作,因为有些字符是比别人例如,你可以容纳下更多的小j'上比单一线S p的.
我想做的只是想办法计算一行的结尾,这样我才知道insert新行的位置,但我也对其他建议持开放态度.谢谢.如果你认为看到我的一些代码就会有所帮助.
更新 而不是实现代码来执行此操作,我与那些将成为使用此程序的唯一人之一的人进行了交谈,并且他对常规记事本格式很好并且我没有意识到这一点,但只要他在他的word中检查了wordWrap然后,记事本格式设置将消除他必须使用侧滚动以读取整行,感谢您的输入
通常,如果一个变量被声明为final,我们就不能覆盖该变量的值,但是当我们使用字符串缓冲区时这并不好.有人能让我知道为什么吗?
以下代码有效!!!!!!
public static void main(String args[]) {
final StringBuffer a=new StringBuffer("Hello");
a.append("Welcome");
System.out.println(a);
}
Run Code Online (Sandbox Code Playgroud)
输出:
你好,欢迎
建议使用(PMD规则AppendCharacterWithChar)StringBuilder.append(char)代替StringBuilder.append(String).我同意这一点.
但是,如果我想附加一个(短)字符串,"='"或者"</"正在使用
StringBuilder.append('=').append('\'')
Run Code Online (Sandbox Code Playgroud)
更好(更快)比
StringBuilder.append("='")
Run Code Online (Sandbox Code Playgroud)
?
java ×10
stringbuffer ×10
string ×3
equals ×1
filewriter ×1
final ×1
hashmap ×1
html ×1
jtextarea ×1
markdown ×1
performance ×1
regex ×1
swing ×1