关于java中字符串处理问题

请教:多个作者分行显示

Author - {...}

Author - {...}

Author - {...}



我想把多个作者名作为一个字符串赋给一个变量author,应该怎么处理呢?



我的方法(本人初学java,望见谅):

String[] input = readAllFile(f).split("}");



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



String re = input[i].replace(",", " ").trim();

if (re.startsWith("Author")) {

// 需要修改

// 把多个author放在??中?怎样计算“Author”出现次数?

                                       

    StringBuffer au = new StringBuffer();

       String author = au.append(input.substring(input.indexOf("-") + 2)).toString();

       System.out.println(author);   //输出:多个作者名,每个名字占一行

       GlobalMode.put("author", author);        //只输出最后一个作者名

}



注:之前定义的:  HashMap<string, string=""> GlobalMode = new HashMap<string, string="">();

请问:author应该是字符串吧,可是为什么GlobalMode.put("author", author);时只输出最后一个作者名呢?不解..请各位给予指点,不胜感激!




问题补充:
我想把多个作者名当成一个字符串,然后赋给“author”,应该怎么修改GlobalMode.put("author", author)才不会只输出最后一个作者名呢?

上面回答中
[code="java"]GlobalMode.put( "author", (GlobalMode.get("author") + "," + author) );[/code]

改成

[code="java"]
String authorNames = GlobalMode.get("author");
authorNames = (authorNames == null) ? author : (authorNames + "," + author);
GlobalMode.put("author", authorNames);
[/code]

[code="java"]
String[] input = readAllFile(f).split("}");
[/code]
这个地方最好使用换行符来分割,具体是“\n”还是“\r\n”,查一下文件格式。
还有,建议使用BufferedReader的readline来逐行读取文件,不要一下全读进来。

怎样计算“Author”出现次数?
不太清楚楼主的意思,按照楼主的代码,for循环结束之后,HashMap.size()不就有了?

HashMap是键值对的映射,对于put方法,如果以前包含了一个该键的映射关系,则旧值被替换。字符串的equals方法被重写了,比较内容,所以你那里只输出最后一个作者名。

[code="java"]GlobalMode.put("author", author); //只输出最后一个作者名[/code]
Map的Key值都被写死了 都是"author" 那么每次都是对这个key设值 后设置的覆盖之前的设置 所以只可能输出最后一个

不太明白你的意图 如果用map 那么你是不是想这么用
[code="java"]GlobalMode.put(author, author);[/code]
用author名做key 值也是author

计算“Author”出现次数, 用GlobalMode.size()就可以得到了

让我来我猜猜你可能的另外一个意思:
[quote]我想把多个作者名当成一个字符串[/quote]
意思是不是 最后用 GlobalMode.get("author") 得到类似 "author1,author2,author3" 这样的结果 如果是这样的话 那么可以这样
[code="java"]
//GlobalMode.put("author", author);
GlobalMode.put( "author", (GlobalMode.get("author") + "," + author) );
[/code]
如果是这个意思的话 那么取得“Author”出现次数要在外面定义一个变量int count = 0;
然后在 if (re.startsWith("Author")) 的括号里面做 ++count;
最后count的值就是次数了。

ps: 这个 GlobalMode 变量取名有点另人费解 你究竟要用这个Map做什么用途 请说明
而且在Java中变量名应该首字母小写 类似 globalMode 这样