1:先取到文件的行数(csv格式的文件)
2:生成从1到文件行数N的随机数m
3:检查m行是否包含特征字符“String”
4:如果是则替换为“nihao”,计数器+1,否则继续从第2步开始,直到计数器到1万
求大侠帮我用java写一下程序,不胜感激~~~~~
[code="java"][/code]
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Random;
public class Csvparser{
private int getToolNum(){
int n = 0;
try {
//open the file
BufferedReader reader = new BufferedReader(
new FileReader("E:/workspace1/test/src/javaeyetest.csv"));
String str=null;
while(true){
str= reader.readLine();
n++;
if(str ==null)break;
}
} catch (Exception e) {
// TODO: handle exception
}
int tolnum = n-1;
System.out.println("wen jian zui da hang shu ="+ tolnum);
return n-1;
}
private void tiHuan( int num,int toolNum){
try {
//open the file
BufferedReader reader = new BufferedReader(
new FileReader("E:/workspace1/test/src/javaeyetest.csv"));
FileOutputStream fos = new FileOutputStream(
"E:/workspace1/test/src/javaeyetest1.csv");
PrintStream stream = new PrintStream(fos);
String str=null;
for(int i = 0;i < toolNum;i++){
if(i == 4){
String strr = reader.readLine().replace("string","nihao");
stream.println(strr);
continue;
}
str= reader.readLine();
stream.println(str);
}
} catch (Exception e) {
// TODO: handle exception
}
}
private int suiJi(int toolNum){
Random r=new Random();
int sj = r.nextInt(toolNum);
System.out.println("sheng cheng sui ji shu ="+sj);
return sj;
}
public static void main(String argn[])throws IOException{
Csvparser ctx=new Csvparser();
for(int i = 0;i<10;i++){
ctx.tiHuan(ctx.suiJi(ctx.getToolNum()), ctx.getToolNum());
}
}
}
你这个是需要写一个完整的程序 包括读csv文件?
我这有一个程序,解析csv的程序,但是你还需要修改,自己生成随机数,替换string
1、读取csv文件。BufferedReader reader = new BufferedReader(new FileReader(d://XXX.csv));
2、文件行数。n=reader.readLine().length;
3、生成0到n的随机数Random r=new Random(); r.nextInt(n);
4、替换string为nihao。reader.readLine().replace("string", "nihao");
恩, 那我帮你写一个,之后发到你邮箱你?
为什么是计数器是1万。
[code="java"]import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class FindReplaceInFile {
public static void main(String[] args) {
String targetString = "String";
String properString = "nihao";
try {
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream("c:/csvFile.csv")));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("c:/csvFile1.csv")));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
int index = 0;
while ((index = sb.indexOf(targetString, index)) != -1) {
sb.replace(index, index + targetString.length(),properString);
index += properString.length();
}
bw.write(sb.toString(), 0, sb.length());
bw.newLine();
sb.delete(0, sb.length());
}
br.close();
bw.flush();
bw.close();
} catch (FileNotFoundException e) {
System.out.println("File not found!!");
} catch (IOException e) {
e.printStackTrace();
}
}
}[/code]
我给的是简单的替换代码,楼主可以参考下。
楼主最好把你的头给你的任务说的详细些。可能涉及到效率问题。
"如果是则替换为“nihao”,计数器+1" 之后是继续替换还是结束?如果是继续替规则是什么
以下代码应该是符合你要求的,在我这边我已经调试通过,如你需求需要什么变动,可以好好读一下代码进行相应的改动!
package com.founder.csv;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Random;
public class ParserCSVFormateFile {
private static final String OLD_STRING = "String";
private static final String NEW_STRING = "nihao";
public static void main(String args[]) {
readAndWriteCSVFile("F:/test.csv");
}
/**
* To read .csv file and replace some string by condition
*
* @param path
* @author Jiang Haiying
*/
private static void readAndWriteCSVFile(String path) {
try {
FileReader fileReader = new FileReader(path);
BufferedWriter bufferWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("c:/test.csv")));
ArrayList<String> list = getTotalContent(fileReader);
int totalLine = list.size();
int count = 0;
if (totalLine != 0) {
Random random = new Random();
while (count <= 10000) {
int radom = random.nextInt(totalLine);
if (list.get(radom) != null && list.get(radom).contains(OLD_STRING)) {
list.get(radom).replace(OLD_STRING, NEW_STRING);
} else {
radom = random.nextInt(totalLine);
}
count++;
}
}
for (String str : list) {
if (str == null || str =="") {
continue;
}
bufferWriter.write(str);
bufferWriter.newLine();
}
fileReader.close();
bufferWriter.flush();
bufferWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* To get all content from .csv file
*
* @param file
* @return the list of the content of .csv file
* @throws IOException
* @author Jiang Haiying
*/
static ArrayList<String> getTotalContent(FileReader fileReader) throws IOException {
ArrayList<String> list = new ArrayList<String>();
LineNumberReader reader = new LineNumberReader(fileReader);
String s = reader.readLine();
list.add(s);
while (s != null) {
s = reader.readLine();
list.add(s);
}
reader.close();
fileReader.close();
return list;
}
}