April_Nara:
私は、Java文字列フォーマッタを書いていますし、私はそれが多分あるよりも、それはより複雑になっていないでしょうか?私は、リストに店舗を与えるファイルを持っています:
"100|Pete's Pizza Palace|George Smith|200"
"400|Pete's Pizza Palace|George Smith|30"
"320|Pete's Pizza Palace|George Smith|-13"
"310|Pete's Pizza Palace|John Smith|2"
「2 217、ピートのピザPalaca | | |ジョージ・スミスピートのピザ宮殿を|ジョン・スミス」:出力が見えるはずです
だから、同じ店のための追加の利益その後、最初のセクションで削除storenumberがあります。私は、同じキー文字列の合計を取得するにはマップに入れていないようです。
static String fileRecords(String[] records) {
int len = records.length;
Map<String, Integer> map = new HashMap<String, Integer>();
Map<String, Integer> profitTotals = new HashMap<String, Integer>();
String[] record = new String[len];
int index = 0;
int[] sums = new int[len];
StringBuilder sb = new StringBuilder();
StringBuilder tempStringBuilder = new StringBuilder();
int totalSum = 0;
for(int i = 0;i<len;i++) {
record = records[i].split("\\|");
String recEntryNameString = tempStringBuilder.append(record[1]).append("|").append(record[2]).append("|").toString();
map.put(recEntryNameString, Integer.parseInt(record[3]));
profitTotals.put(recEntryNameString, Integer.parseInt(record[3]));
Iterator iter = map.entrySet().iterator();
for (Map.Entry<String, Integer> entries : map.entrySet()) {
for(Map.Entry<String, Integer> sumNum : profitTotals.entrySet()) {
if(!entries.getKey().equals(sumNum.getKey())) {
totalSum = entries.getKey() + sumNum.getKey();
map.replace(recEntryNameString, entries.getKey(), totalSum);
profitTotals.remove(recEntryNameString);
}
}
}
}
Iterator<String, Integer> iter = map.entrySet().iterator();
while(iter.hasNext()) {
Map.Entry<String, Integer> entry = iter.next();
if(iter.hasNext()==true)
sb.append(entry.getKey()).append(entry.getValue()).append(",");
else
sb.append(entry.getKey()).append(entry.getValue());
}
return sb.toString();
}
私は本当に近くにある出力を得るが、再び正しいフォーマットを探して
Pete's Pizza Palace|George Smith|Pete's Pizza Palace|George Smith|Pete's Pizza Palace|George
Smith|87,Pete's Pizza Palace|George Smith|100,Pete's Pizza Palace|George Smith|Pete's Pizza
Palace|George Smith|123,
リック:
私は本当にJava言語での新しい機能を使用するためのKartikの答えのような。
少し簡単になります理解します:
public class PizzaStore {
static String[] records = new String[]{"100|Pete's Pizza Palace|George Smith|200",
"400|Pete's Pizza Palace|George Smith|30",
"320|Pete's Pizza Palace|George Smith|-13",
"310|Pete's Pizza Palace|John Smith|2"};
public static void main(String[] args) {
fileRecords(records);
}
static void fileRecords(String[] records) {
int len = records.length;
HashMap<String, Integer> runningTotals = new HashMap<>();
for (int i = 0; i < len; i++) {
String rec = records[i];
String[] fields = rec.split("\\|");
String storeName = fields[1] + "|" + fields[2];
Integer value = new Integer(fields[3]);
if (!runningTotals.containsKey(storeName)) {
runningTotals.put(storeName, 0);
}
runningTotals.put(storeName, runningTotals.get(storeName) + value);
}
for (String s : runningTotals.keySet()) {
System.out.println(s + "|" + runningTotals.get(s));
}
}
}
ここでは、2つの中間の文字列がキーを形成するために結合することができるという洞察(Kartikにクレジット)を使用しています。
出力は次のようになります。
ピートのピザ宮殿|ジョージ・スミス| 217
ピートのピザ宮殿|ジョン・スミス| 2
例えば、異なるライン上で分離し、これは(印刷およびインサートにのprintlnを変える簡単に調節可能です|それらの間で「」。