- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在编写 Perl 和 Python 代码,这次我得到了一个用 Java 编写代码的任务。所以我不太熟悉在 Java 中处理数据。
我的任务涉及拥有一个输入文件,我需要在其中检查依赖项,然后输出具有传递依赖项的那些。下面更清晰的想法:
输入文件:
A: B C
B: C E
C: G
D: A
A: B C E G
B: C E G
C: G
D: A B C E G
import java.util.StringTokenizer;
import java.io.*;
public class TestDependency {
public static void main(String[] args) {
try{
FileInputStream fstream = new FileInputStream("input-file");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
while ((strLine = br.readLine()) != null) {
StringTokenizer items = new StringTokenizer(strLine, ":");
System.out.println("I: " + items.nextToken().trim());
StringTokenizer depn = new StringTokenizer(items.nextToken().trim(), " ");
while(depn.hasMoreTokens()) {
System.out.println( "D: " + depn.nextToken().trim() );
}
}
} catch (Exception e){//Catch exception if any
System.err.println("Error: " + e.getMessage());
}
}
}
最佳答案
这在内存方面不是很有效,需要良好的输入,但应该运行良好。
public class NodeParser {
// Map holding references to nodes
private Map<String, List<String>> nodeReferenceMap;
/**
* Parse file and create key/node array pairs
* @param inputFile
* @return
* @throws IOException
*/
public Map<String, List<String>> parseNodes(String inputFile) throws IOException {
// Reset list if reusing same object
nodeReferenceMap = new HashMap<String, List<String>>();
// Read file
FileInputStream fstream = new FileInputStream(inputFile);
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
// Parse nodes into reference mapping
while((strLine = br.readLine()) != null) {
// Split key from nodes
String[] tokens = strLine.split(":");
String key = tokens[0].trim();
String[] nodes = tokens[1].trim().split(" ");
// Set nodes as an array list for key
nodeReferenceMap.put(key, Arrays.asList(nodes));
}
// Recursively build node mapping
Map<String, Set<String>> parsedNodeMap = new HashMap<String, Set<String>>();
for(Map.Entry<String, List<String>> entry : nodeReferenceMap.entrySet()) {
String key = entry.getKey();
List<String> nodes = entry.getValue();
// Create initial node set
Set<String> outSet = new HashSet<String>();
parsedNodeMap.put(key, outSet);
// Start recursive call
addNode(outSet, nodes);
}
// Sort keys
List<String> sortedKeys = new ArrayList<String>(parsedNodeMap.keySet());
Collections.sort(sortedKeys);
// Sort nodes
Map<String, List<String>> sortedParsedNodeMap = new LinkedHashMap<String, List<String>>();
for(String key : sortedKeys) {
List<String> sortedNodes = new ArrayList<String>(parsedNodeMap.get(key));
Collections.sort(sortedNodes);
sortedParsedNodeMap.put(key, sortedNodes);
}
// Return sorted key/node mapping
return sortedParsedNodeMap;
}
/**
* Recursively add nodes by referencing the previously generated list mapping
* @param outSet
* @param nodes
*/
private void addNode(Set<String> outSet, List<String> nodes) {
// Add each node to the set mapping
for(String node : nodes) {
outSet.add(node);
// Get referenced nodes
List<String> nodeList = nodeReferenceMap.get(node);
if(nodeList != null) {
// Create array list from abstract list for remove support
List<String> referencedNodes = new ArrayList<String>(nodeList);
// Remove already searched nodes to prevent infinite recursion
referencedNodes.removeAll(outSet);
// Recursively search more node paths
if(!referencedNodes.isEmpty()) {
addNode(outSet, referencedNodes);
}
}
}
}
}
public static void main(String[] args) {
try {
NodeParser nodeParser = new NodeParser();
Map<String, List<String>> nodeSet = nodeParser.parseNodes("./res/input.txt");
for(Map.Entry<String, List<String>> entry : nodeSet.entrySet()) {
String key = entry.getKey();
List<String> nodes = entry.getValue();
System.out.println(key + ": " + nodes);
}
} catch (IOException e){
System.err.println("Error: " + e.getMessage());
}
}
关于Java - 将 StringTokenizer 保存到数组中以便在其他方法中进一步处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7621478/
免责声明:我昨天才学会如何做到这一点,我很绝望 我有 3 个类(class)(Student、ClassSchedule、ClassEnrolment) public class ClassEnrol
我正在创建一个程序,它对 boolean 逻辑表达式进行标记并返回标记的字符串数组。以下是我的代码: public static String[] tokenize(String s) { S
这个问题在这里已经有了答案: StringTokenizer method equivalence (2 个回答) 关闭9年前。 我对 stringtokenizer 的 hasmoreelement
我创建了一个读取这样的文件集的方法(//...是注释,忽略它们): 5 // n jobs 2 // n tools 1 4 5 6 2 1 5 4 2 3 矩阵代表每项工作使用的工具,但在这里并不重
String a ="the STRING TOKENIZER CLASS ALLOWS an APPLICATION to BREAK a STRING into TOKENS. "; Strin
我有以下代码,它将标记字符串以创建对象列表: import java.util.StringTokenizer; public class TestStringTokenizer { priv
嗨,我正在尝试使用 java 中的 StringTokeniser 对文本文件进行标记。但问题是它只需要该行的最后一个词。需要的帮助很少。此示例代码是映射缩减函数的一部分。 String profil
我正在尝试使用 stringTokenizer 方法来读取以以下格式存储在文件中的二维数组.. 1 1 1 1 代码是... BufferedReader in = new BufferedReade
我试图从文档中仅提取小写字母数字字符: String delim = "abcdefghijklmnopqrstuvwxyz0123456789"; StringTokenizer strtok =
因此,我在分配时遇到了麻烦,我需要根据给定的参数,使用 stringtokenizer 构造和方法返回字符串的第一个或第二个标记。 EX: "3+5", 2. 其返回应为 5。现在我到目前为止所拥有的
我必须标记以下字符串 12/12/2010:{content1:[{xyz,abc}],13/12/2010:{content2:[{xyz,abc},{content3:[{aa,bb}]}] 如果
为什么 hasMoreElements 和 hasMoreTokens 返回相同的值? 最佳答案 来自 hasMoreElements() 的 javadoc /** * Returns the sa
我有这段代码来解析 url 字符串,例如“?var=val”但是当“search”只是“var=val”时,此代码失败,如何使“var=val”也能工作? StringTokenizer st
我在使用 StringTokenizer 将几行文本分解为单独的标记时遇到问题。输入的文字为 3 monkeys 但是,StringTokenizer 显然将其解释为“3monkeys”。我需要它是“
我已经编写了一个 Worker 类和 Worker 的驱动程序类..我的工作类编译正常并显示所需的输出..但是在数组和 StringTokenizer 中我面临着主要问题......并且在 TestW
我正在尝试提取文本文件中的文件名。目前,我正在使用标记器。不知何故,并非所有文件名都被正确提取。 这是我的代码: list = sc.nextLine(); token = new StringTok
Java。所以我想输入一个整数数组,然后使用 StringTokenizer 打印出最大值。我知道如何使用整数执行此操作,但是当我尝试使用数组执行此操作时,String to int 命令 (Inte
我有两个文件,名为“ride.in”和“ride.out”。 “ride.in”文件包含两行,一行包含字符串“COMBO”,另一行包含字符串“ADEFGA”。正如我所说,每个字符串都位于单独的行上,因
我试图使用 StringTokenizer 将逗号设置为文件中各行的分隔符,每行由邮政编码和城市组成(例如 01221,华盛顿特区),但我不希望第二个逗号是分隔符,因为它是城市名称的一部分。我有 2
我最近在大学进行了一次java小类测试,我需要帮助。 我有一个名为“Products”的对象,它采用(String、double、int)作为参数。 我创建了一个ArrayList ArrayList
我是一名优秀的程序员,十分优秀!