stringbuilder去重(string 去重)

http://www.itjxue.com  2023-02-15 04:57  来源:未知  点击次数: 

JAVA合并两个文件并去重

先做一个buffer:

StringBuilder sb_a = new StringBuilder(); // for a

StringBuilder sb_b = new StringBuilder(); // for b

然後读文件:

Path aFile = Paths.get("a.txt");

try (BufferedReader reader = Files.newBufferedReader( aFile, Charset.defaultCharset())) {

String lineFromFile = "";

while((lineFromFile = reader.readLine()) != null){

sb_a.append(lineFromFile);

}

} catch(IOException exception) {

System.out.println("Error while reading file");

}

b.txt也是同一个方法

跟著以你自定义的方法去比较两个怎样合拼,暂存为String merged = ...;

最後写回文件:

Path abFile = Paths.get("ab.txt");

try (BufferedWriter writer = Files.newBufferedWriter( abFile, Charset.defaultCharset())) {

writer.append(merged);

writer.newLine(); // optional

writer.flush();

} catch(IOException exception) {

System.out.println("Error writing to file");

}

(算法)去除字符串中的重复字符(时间复杂度)

1.一般会想到遍历字符串,去除重复的字符,这样时间复杂度是O(n2),时间复杂度太高。

static String sub(String str){

StringBuffer result =newStringBuffer();

List list =new ArrayList();

char[] cs = str.toCharArray();

for(int i=0; ics.length; i++){

if(!list.contains(cs[i])){

result.append(cs[i]);

list.add(cs[i]);

}

}

returnresult.toString();

}

2.再仔细想一想

用java的String的indexOf方法来达到字符串去重的目的,indexOf的功能是返回指定字符在此字符串中第一次出现处的索引:

public static String QuChong(String str){

? ? ? ? StringBuilder sb=new StringBuilder();

? ? ? ? for(int i=0;istr.length();i++){

? ? ? ? ? ? if(str.indexOf(str.charAt(i))==i){

? ? ? ? ? ? ? ? //第一次出现

? ? ? ? ? ? ? ? sb.append(str.charAt(i));

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? String result=sb.toString();

? ? ? ? return result;

? ? }

Java 字符串去重

public?class?Demo8?{

?public?static?void?main(String[]?args)?{?

????????System.out.println(removerepeatedchar("ddddccffgd"));?

????}?

????public?static?String?removerepeatedchar(String?s)?{?

????????if?(s?==?null)?

????????????return?s;?

????????StringBuilder?sb?=?new?StringBuilder();?

????????int?i?=?0,?len?=?s.length();?

????????while?(i??len)?{?

????????????char?c?=?s.charAt(i);?

????????????sb.append(c);?

????????????i++;?

????????????while?(i??len??s.charAt(i)?==?c)?{?

????????????????i++;?

????????????}?

????????}?

????????return?sb.toString();?

????}?

}

StringBuilder为什么线程不安全?

核心提示:在前面的面试题讲解中我们对比了String、StringBuilder和StringBuffer的区别,其中一项便提到StringBuilder是非线程安全的,那么是什么原因导致了StringBuilder的线程不安全呢?原因分析如果你看了StringBuilder或StringBuffer的源代码会说,因为StringBuilder在append操作时并未使用线程同步,而StringBuffer几乎大部分方法都使用了synchronized关键字进行方法级别的同步处理。上面这种说法肯定是正确的,对照

在前面的面试题讲解中我们对比了String、StringBuilder和StringBuffer的区别,其中一项便提到StringBuilder是非线程安全的,那么是什么原因导致了StringBuilder的线程不安全呢?

原因分析

如果你看了StringBuilder或StringBuffer的源代码会说,因为StringBuilder在append操作时并未使用线程同步,而StringBuffer几乎大部分方法都使用了synchronized关键字进行方法级别的同步处理。

上面这种说法肯定是正确的,对照一下StringBuilder和StringBuffer的部分源代码也能够看出来。

StringBuilder的append方法源代码:

@Override

public StringBuilder append(String str) {

super.append(str);

return this;

}

StringBuffer的append方法源代码:

@Override

public synchronized StringBuffer append(String str) {

toStringCache = null;

super.append(str);

return this;

}

(责任编辑:IT教学网)

更多

相关wordpress建站文章