我有一个扫描仪字符串输入,格式如下:中午12:00:00。
我设法最终将PM或AM隔离开来:
:- op(400, fy , not).
:- op(500, xfy, and).
:- op(600, xfy, or ).
:- op(700, xfy, imp).
:- op(800, xfy, iff ).
distr(_, [], []).
distr([], _, []).
distr([C|Cs], Ds, Es) :- distr_un(C, Ds, Ss), distr(Cs, Ds, Ts), append(Ss, Ts, Es).
distr_un(_, [], []).
distr_un(C, [D|Ds], [E|Es]) :- append(C, D, E), distr_un(C, Ds, Es).
cnf(F, [[F]]) :- atom(F), !.
cnf(not(F), [[not(F )]]) :- atom(F), !.
cnf(not not F, Rs) :- cnf(F, Rs).
cnf(not (F imp G), Rs) :- cnf(F and not G, Rs).
cnf(not (F iff G), Rs) :- cnf((F and not G) or (not F and G), Rs).
cnf(not(F and G), Rs) :- cnf((not F) or (not G), Rs).
cnf(not(F or G), Rs) :- cnf((not F) and (not G), Rs).
cnf(F and G, Rs) :- cnf(F, Cs), cnf(G, Ds), append(Cs, Ds, Rs).
cnf(F or G, Rs) :- cnf(F, Cs), cnf(G, Ds), distr(Cs, Ds, Rs).
cnf(F imp G, Rs) :- cnf((not F) or G, Rs).
cnf(F iff G, Rs) :- cnf((not F or G) and (not G or F), Rs).
val(X,0) :- atom(X).
val(X,1) :- atom(X).
value(X, [val(X, B)|_], B) :- !.
value(X, [_|Ps], B) :- value(X, Ps, B), !.
value(not X, [val(X, B)|_], V) :- V is 1-B, !.
value(not X, [_|Ps], B) :- value(not X, Ps, B), !.
sp([],[]).
sp([F|Fs], Ss) :- setof(A1, member(not A1, F), R1), setof(A, (member(A,F), atom(A)), R), sp(Fs, N), append(R,N,M1), append(M1, R1, M), setof(B,member(B,M),Ss), !.
sp([F|Fs], Ss) :- setof(A, (member(A,F), atom(A)), R), sp(Fs, N), append(R,N,M), setof(B,member(B,M),Ss), !.
sp([F|Fs], Ss) :- setof(A, (member(not A,F), atom(A)), R), sp(Fs, N), append(R,N,M), setof(B,member(B,M),Ss), !.
valuation([],[]).
valuation([A|As], [V|Vs]) :- (V = val(A,0); V = val(A,1)), valuation(As,Vs).
ext([F|Fs], Vs, B) :- sp([F|Fs], Ss), valuation(Ss, Vs), ext_([F|Fs], Vs, B).
ext_([], _, 1).
ext_([F|Fs], Vs, 1) :- cl(F, Vs, 1), ext_(Fs, Vs, 1).
ext_([F|Fs], Vs, 0) :- cl(F, Vs, 0); ext_(Fs, Vs, 0).
cl([A|As], Vs, 1) :- value(A,Vs,1); cl(As, Vs, 1).
cl([A|As], Vs, 0) :- value(A,Vs,0), cl(As,Vs,0).
cl([], _, 0).
model(F, Vs) :- ext(F, Vs, 1).
models(F, Vs) :- cnf(F, Fs), setof(V, model(Fs, V), Vs).
models(F, Vs) :- setof(V, model(F, V), Vs).
我知道我隔离PM或AM的方式不是最好的,所以希望有一种更好的方法可以获得一个完全一个字符串的数组。
但是当我为" nums"运行for循环时数组,输出为:
public class ConverTime
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String timeString = sc.next();
String[] pmOrAm = timeString.split("\\d");
String[] nums = timeString.split("(: + \\D)");
// PM or AM
String timeType = pmOrAm[pmOrAm.length - 1];
for (String n: nums)
{
System.out.println(n);
}
}
}
我希望输出如此:
12:00:00PM
没有" PM"或者" AM。"我该怎么做?
答案 0 :(得分:3)
为了完整起见,虽然有分裂和正则表达式的良好解决方案,但还有另一个用于您的用例......
Data date = new SimpleDateFormat("HH:mm:ssaa").parse(s);
Calendar cal = new GregorianCalendar();
cal.setTime(date);
System.out.println( data.get(Calendar.HOUR);
System.out.println( data.get(Calendar.MINUTE);
System.out.println( data.get(Calendar.SECOND);
就像一个不同方向的想法一样,因为我们在这里谈论时间字符串,这将允许你对纯粹的正则表达式格式做出假设......
答案 1 :(得分:2)
答案 2 :(得分:2)
一种简单的方法可能是:
timeString.split("(AM|PM|:)")
希望有所帮助
答案 3 :(得分:1)
你必须使用String[] nums = timeString.split(":");
并输出每个索引,如System.out.println(nums[0]); , nums[1] and nums[2]
,并删除你可以做的上午/下午String removeap = nums[2].substring(0, 2);
答案 4 :(得分:1)
我认为更正确的方法是在这里使用正则表达式而不是拆分。这样,您可以检测是否获得了意外的输入,而不是错误地处理字符串。
String s = "12:01:02PM";
Pattern pat = Pattern.compile("(\\d\\d):(\\d\\d):(\\d\\d)\\w\\w");
Matcher matcher = pat.matcher(s);
if (!matcher.matches()) {
// Handle error...
}
int hh = Integer.valueOf(matcher.group(1));
int mm = Integer.valueOf(matcher.group(2));
int ss = Integer.valueOf(matcher.group(3));
System.out.println(hh + ", " + mm + ", " + ss);