1

我的文本文件包含这样的行

FLTR TID:0000003756 RPC ID:0000108159 用户:补救应用服务

FLTR TID:0000003756 RPC ID:0000108159 用户:补救应用服务

FLTR TID:0000003756 RPC ID:0000108159 用户:ibsdr

FLTR TID:0000003756 RPC ID:0000108159 用户:Vinay.k@in.uni.com

FLTR TID:0000003756 RPC ID:0000108159 用户:Vinay.k@in.uni.com

FLTR TID:0000003756 RPC ID:0000108159 用户:wsdl

FLTR TID:0000003756 RPC ID:0000108159 用户:stefan.hummel@uni.com

我想将突出显示的单词存储在 Excel 工作表中的列中,并且我只想存储唯一的用户名.. 比如:

第 1 列....第 2列

S.NO ......用户名

1 ..................补救申请服务

2 .................. ibsdr

3 ..................维奈.k@in.uni.com

4 ........ wsdl

5 ..................... stefan.hummel@uni.com

这是我尝试过的

public class User {

    static HSSFWorkbook hwb = new HSSFWorkbook();
    static HSSFSheet sheet = hwb.createSheet("new sheet");
    static HSSFRow rowhead = sheet.createRow((short) 0);
    static HSSFRow row = sheet.createRow((short) 1);
    static int count = 1;

    public static void main(String [] args) {
        try {
            rowhead.createCell((short) 0).setCellValue("SNo");
            rowhead.createCell((short) 1).setCellValue("USER NAME");
            BufferedReader br = new BufferedReader(new FileReader("filter.log"));
            String str = null;
            String user = null;
            while ((str = br.readLine()) != null) {
                if (str.contains("FLTR")) {
                    user = str.substring(48, 75); // This is to get user names
                    count++;
                    store(user, count);
                }
            }
            FileOutputStream fileOut = new FileOutputStream("D:/Excel.xls");
            hwb.write(fileOut);
            fileOut.close();
            System.out.println("Your excel file has been generated!");
        }
        catch (Exception ex) {
            System.out.println(ex);
        }
    }

    private static void store(String user, int count) {
        row.createCell((short) 0).setCellValue(count);
        row.createCell((short) 1).setCellValue(user);
    }
}

输出

S.NO.......用户名

17963......补救申请服务

在这个每当我执行这个程序时,只有第一个值被存储而不是所有值存储..我只想在这个 Excel 表中存储唯一的用户名..

请帮助我,在此先感谢

4

4 回答 4

1
  • 对于唯一名称,您可以ArrayList<String>在新的 UserName 出现时使用 add 并在此之前检查用户是否存在于 arrayList 中(通过使用 contains("UName") 然后继续。
  • 使用String username=line.substring(line.lastindexOf(":")).trim();或 您可以使用line.split(":")[1].trim();

对于 Excel 行创建,您可以使用循环。

int i=0;
while((str=br.readLine())!=null){
row = sheet.createRow((short) i);
cell = row.createCell(i);
cell.setCellValue("UserName");//Set UserName after getting it from 'str'
i++;
}
于 2014-06-06T06:05:33.480 回答
1

首先,我不是专家,我自己也从未尝试过,目前我也不能。通过查看您的代码,我可以发现一些可能是您的问题的原因的设计缺陷。

你只声明一行:

static HSSFRow row= sheet.createRow((short)1);

这意味着在您的store方法中,将一次又一次地写入同一行的单元格。您缺少的是在遇到唯一名称时创建新行的逻辑。对于这项任务,我是否可以建议使用一个Set最好的对哈希进行操作以缩短查找时间并在其中存储所有唯一名称的方法?这样您就可以使用简单的contains查询。

此外,您的count变量已关闭并从 2 开始计数,而不是从 1 开始计数。将其初始化为 0 或在使用后递增。

一些伪代码:

private HashSet<String> names = new HashSet<>();
// More fields here.

// Now start in your if clause:
if(str.contains("FLTR" && !names.contains(str.substring(48))
{
    store(user, count);
    count++;
    names.add(str.substring(48));
}

// More of your code.

private static void store(String user, int count)
{
    // Create new row
    HSSFRow row = sheet.createRow((short)rowCount);
    rowCount++;


    row.createCell((short) 0).setCellValue(count);
    row.createCell((short) 1).setCellValue(user);
}
于 2014-06-06T05:56:50.943 回答
0

公共类 UniqueUSER {

静态 HSSFWorkbook hwb=new HSSFWorkbook();

静态 HSSFSheet sheet = hwb.createSheet("new sheet");

公共静态 void main(String[]args) 抛出 IOException

{

HSSFRrow 行;

HashSet 名称 = new HashSet<>();

BufferedReader br=new BufferedReader(new FileReader("simle.log"));

PrintStream out=new PrintStream("D:/Excel.xls");

字符串 str=null;

整数计数=0;

而((str=br.readLine())!=null) {

如果(str.contains(“FLTR”))

{

字符串用户=str.substring(97, 135);

计数++;

名称.添加(用户);

HSSFRow row1= sheet.createRow((short)count);

row1.createCell((short) 0).setCellValue("names");

}

}

迭代器 itr=names.iterator();

而(itr.hasNext()){

out.println(itr.next());  

}

}

}

于 2014-06-06T10:40:30.203 回答
0

我建议您进行两项改进,以便更轻松地解决您的问题。

1)不要尝试使用Java写入Excel表格,它有点复杂。相反,您可以写入 CSV 文件。您可以在外部打开此 CSV 文件并另存为 Excel。

2)下面的行可能会导致用户名的修剪:

 user=str.substring(48,75);   // This is to get user names

相反,您可以使用

user=str.substring(48);   // This is to get user names

因此,编写 CSV 不需要 Excel 库,也可以在 Excel 工作簿中打开。:)

于 2014-06-06T05:51:06.550 回答