5023971 s 2016-05-22 21:34:48
5023971 s 2016-05-22 21:35:57
5023971 s 2016-05-22 21:36:35
5023971 s 2016-05-22 21:37:42
5023971 s 2016-05-22 21:39:41 3 sple
5296256 d 2016-03-04 08:05:12
5296256 d 2016-03-04 08:05:13
5296256 d 2016-03-04 08:05:14 4 sup
5324887 d 2016-05-06 10:22:22
5324887 d 2016-05-06 10:22:30 2 sup
79159 r l 2016-03-13 16:33:59 1 roy
1318887 g a 2016-03-15 11:59:09 2 gg
1318887 g a 2016-03-21 13:26:13 1 gglrt
4821757 y a 2016-05-24 19:46:39 8 hnd
従業員のID、名前、時刻、乱数、従業員の行動を含む従業員のリストがあるとします。名前は1つまたは2つのトークンですが、アクションは常に1つのトークンで構成されます。私たちが関心を持つのは、従業員が最後に行った行動を抽出することです(例えば、s
とsam
、d
、sup
など) 以下のコードは仕事をしますが、それぞれ異なる従業員。どのように要件を満たすためにそれを変更するには?ここで最後の従業員の最後のアクションの抽出
static StringTokenizer a;
public static boolean isInteger(String s) {
try {
Integer.parseInt(s);
} catch(NumberFormatException | NullPointerException e) {
return false;
}
return true;
}
static boolean first=true;
public static void main(String[] args) {
BufferedReader br=new BufferedReader(file);
String line;
String name="";
String tempaction="";
String action="";
while((line=br.readLine())!=null){
int nameLenght=0;
String tempName="";
String temp2;
String temp3;
a=new StringTokenizer(line);
if(first){
while(a.hasMoreTokens()){
temp2=a.nextToken();
temp3=temp2.charAt(0)+"";
if((temp2).startsWith("2016")) break;
if(!isInteger(temp3)){
nameLenght++;
tempName=tempName+" "+temp2;
}
}
if(nameLenght<3 && !name.equals(tempName)){
name=tempName;
System.out.println(name);
first=false;
}
}
action="";
if(!first){
while(a.hasMoreTokens()){
temp2=a.nextToken();
temp3=temp2.charAt(0)+"";
if((temp2).startsWith("2016")) break;
if(!isInteger(temp3)){
action=action+" "+temp2;
}
}
if(!tempAction.equals(action)){
tempAction=action;
System.out.println(action);
first=true;
}
first=true;
}
}
}
変数に 'temp'、' temp2'、 'temp3'、' tempT'などの無意味な名前があると、あなたのロジックに従うのは本当に難しいです。さらに、これは固定長のフィールド形式です。文字列トークナイザで処理するのは良い考えではありません。ライン上の位置によってフィールドを取得すると、ロジックがはるかに簡単になります。 – RealSkeptic
@RealSkepticしかし、従業員の名前は固定されていません。長さが1よりも長くなっています。だから私は長さを数えなければならない。 1または2の場合は、最後のアクションを取得します。このようなもの。そして、私はvarsの名前にいくつかの変更を加えました。 temp 2とtemp 3は、重要でない部分(IDと日付と時刻)です。 – user3049183
あなたが指定したファイルでは、従業員名フィールドは固定されていますが、そのうち3つは常に空白ですが、そのうちのいくつかはスペースです。 – RealSkeptic