说明| 一种Java程序,用于读取文本文件并按字母顺序打印每个唯一单词以及单词在文本中出现的次数.
程序应该声明一个类型的变量Map<String, Integer>来存储单词和相应的出现频率.但是哪种具体类型呢?TreeMap<String, Number>还是HashMap<String, Number>?
输入应转换为小写.
一个单词不包含以下任何字符: \t\t\n]f.,!?:;\"()'
示例输出|
Word Frequency
a 1
and 5
appearances 1
as 1
.
.
.
Run Code Online (Sandbox Code Playgroud)
备注| 我知道,我已经在Perl中看到了大致两行代码的优雅解决方案.但是,我想在Java中看到它.
编辑:哦,是的,使用这些结构之一显示实现是有帮助的(在Java中).
我有一个文件(更具体地说,一个log4j配置文件),我希望能够读取文件并在代码中挑选出某些行并替换它们.例如,在文件中有一个文本字符串,指示存储它的目录,或记录器的级别.我希望能够在不读取文件,将其写入另一个文件以及删除原始文件的情况下替换这些文本字符串.有没有更有效的方法使用Java查找和替换文件中的文本?
以下是我正在尝试使用的文本文件的示例:
log4j.rootLogger=DEBUG, A0
log4j.appender.A0=org.apache.log4j.RollingFileAppender
log4j.appender.A0.File=C:/log.txt
log4j.appender.A0.MaxFileSize=100KB
log4j.appender.A0.MaxBackupIndex=1
log4j.appender.A0.layout=org.apache.log4j.RollingFileAppender
log4j.appender.A0.layout.ConversionPattern=%-4r [%t] %-5p: %c %x - %m%n
Run Code Online (Sandbox Code Playgroud)
我希望能够读取该文件并将'DEBUG'替换为另一个级别或替换文件目录名'C:/log.txt'.日志配置文件也是用xml编写的.下面是一个例子.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
<appender class="org.apache.log4j.RollingFileAppender" name="A0">
<param name="append" value="false"/>
<param name="File" value="C:/log/.txt"/>
<param name="MaxBackupIndex" value="1"/>
<param name="MaxFileSize" value="100KB"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-4r [%t] %-5p: %c %x - %m%n"/>
</layout>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="A0"/>
</root>
</log4j:configuration>
Run Code Online (Sandbox Code Playgroud)
我在想这种类型的实现可能会使用哈希映射吗?
我使用Runnable每秒从玩家冷却时间自动减去20,但我不知道如何在迭代它时替换值的值.如何让它更新每个键的值?
public class CoolDownTimer implements Runnable {
@Override
public void run() {
for (Long l : playerCooldowns.values()) {
l = l - 20;
playerCooldowns.put(Key???, l);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个数组,以及一个返回给定值的值的函数.最后,我想创建一个hashmap,它将数组的值作为键值,并将f(key_value)的结果作为值.是否有一个干净,简单的方法,就像使用块的每个/ map一样,这样做?
所以相当于的东西
hsh = {}
[1,2,3,4].each do |x|
hsh[x] = f(x)
end
Run Code Online (Sandbox Code Playgroud)
但看起来更像这个,因为它很简单,一行?
results = array.map { | x | f(x) }
Run Code Online (Sandbox Code Playgroud) 我经常需要获取对象列表,并根据对象中包含的值将它们分组到Map中.例如.按国家/地区列出用户和组.
我的代码通常如下所示:
Map<String, List<User>> usersByCountry = new HashMap<String, List<User>>();
for(User user : listOfUsers) {
if(usersByCountry.containsKey(user.getCountry())) {
//Add to existing list
usersByCountry.get(user.getCountry()).add(user);
} else {
//Create new list
List<User> users = new ArrayList<User>(1);
users.add(user);
usersByCountry.put(user.getCountry(), users);
}
}
Run Code Online (Sandbox Code Playgroud)
但是我不禁想到这很尴尬,而且一些大师有更好的方法.到目前为止,我能看到的最接近的是来自Google Collections的MultiMap.
有没有标准方法?
谢谢!
如何将特定的HashMap条目移动到Last位置?
例如,我有像这样的HashMap值:
HashMap<String,Integer> map = new HashMap<String,Integer>();
map= {Not-Specified 1, test 2, testtest 3};
Run Code Online (Sandbox Code Playgroud)
"未指定"可能处于任何位置.它可能首先出现在地图的中间.但我想把"未指定"移到最后一个位置.
我怎样才能做到这一点?提前致谢.
让我说我有这个代码
Map<String, String> list = new HashMap<String, String>();
list.put("number1", "one");
list.put("number2", "two");
Run Code Online (Sandbox Code Playgroud)
我该如何制作一些"别名"类型
Map<String, String>
Run Code Online (Sandbox Code Playgroud)
更容易被重写的东西
// may be something like this
theNewType = HashMap<String, String>;
theNewType list = new theNewType();
list.put("number1", "one");
list.put("number2", "two");
Run Code Online (Sandbox Code Playgroud)
基本上我的问题是,如何为某些"类型"创建"别名",因此当需要更改整个程序代码时,我可以更容易编写和更容易.
谢谢,对不起,如果这是一个愚蠢的问题.我是Java的新手.
如果我有一个JSF支持bean返回一个ArrayList类型的对象,我应该可以<c:foreach>用来迭代列表中的元素.每个元素都包含一个地图,虽然这里已经回答了如何通过JSTL访问地图内容的问题,如果我传递了这样的地图数组,我找不到如何迭代它们仍然使用JSTL访问地图内容.有文档引用简单的迭代器,但不是那些项目本身就是映射的文档.
如果有人能给我一个简单的例子来说明如何在JSP中迭代java List我会非常感激.标记
在Java中,如何将HashMap返回的值作为List?
我不知道如何在C++中使用哈希函数,但我知道我们可以使用hash_map.g ++是否通过简单包含来支持#include <hash_map>?使用什么简单的例子hash_map?