前言:
1) 操作场景是编程中的边沿处理
2) 思想: 把不同的地方经过处理变成逻辑上相同的, 长和if结合使用
3) 分类有两种:
上式:预先补齐,使得没有边沿的区别。
下式:事后修正,先放任结果中的边沿瑕疵,最后修理它
案例:
package day1;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class cutflush {
/**
* 一刀切
*/
public static void main(String[] args) {
pyramid4();
}
// 做法1 虾米级
public static void pyramid1(){
List list = new ArrayList();
String testStr = "abc ttt,kmd,uuu xyz";
String[] subs0 = testStr.split(" ");
for(int i=0; i<subs0.length; i++){
String subs1 = subs0[i];
String[] subs10 = subs1.split(",");
for(int j=0; j<subs10.length; j++){
list.add(subs10[j]);
}
}
String[] arrys = (String[]) list.toArray(new String[list.size()]);
//Arrays.toString(arrys)
System.out.println(Arrays.toString(arrys));
}
/**
* 一刀切之上式:预先补齐
* 0 用逗号或空格分隔的串,提取出各个部分
* 1 观察发现除了xyz外每个字符串后都跟着一个特殊字符,或者空格
* 2 将最后的字符串xyz后面也跟上,或者空格,保证处理所有字符串特征一致(--->这就是预先补齐表达的含义)
*/
public static void pyramid2(){
String testStr = "abc ttt,kmd,uuu xyz";
String tempStr = "";
testStr += ",";
for(int i=0; i<testStr.length(); i++){
char tempChar = testStr.charAt(i) ;
if(tempChar == ' ' || tempChar == ','){
System.out.println(tempStr);
tempStr = "";
}else{
tempStr += testStr.charAt(i) ;
}
}
}
/**
* 一刀切之下式:事后修正法 ---> 先放任结果中的边沿瑕疵,最后修理它
* 0 将字符串用,分隔并输出
*/
public static void pyramid3(){
String testStr = "abcttt";
StringBuilder sb = new StringBuilder();
for(int i=0; i<testStr.length(); i++){
char tempChar = testStr.charAt(i);
sb.append(",").append(tempChar);
}
String result = sb.substring(1, sb.length());
System.out.println(result);
}
/**
* 一刀切之上式:通话时间案例
* 某个用户的开始通话时间为: 12:38:15
结束通话时间为: 12:39:16
则该用户通话时长为:62秒
对于一般的情况,可能需要考虑:跨分钟,跨小时,跨零点的问题。
*/
public static void pyramid4(){
String s1 = "23:59:9";
String s2 = "00:59:8";
int hour;
if (Integer.valueOf(mySplit(s2).get(0)) < Integer.valueOf(mySplit(s1).get(0))) {
hour = 24 + Integer.valueOf(mySplit(s2).get(0)) - Integer.valueOf(mySplit(s1).get(0));// 跨零点时+24
} else {
hour = Integer.valueOf(mySplit(s2).get(0)) - Integer.valueOf(mySplit(s1).get(0));
}
int min = Integer.valueOf(mySplit(s2).get(1)) - Integer.valueOf(mySplit(s1).get(1));
int sec = Integer.valueOf(mySplit(s2).get(2)) - Integer.valueOf(mySplit(s1).get(2)) + 1;
System.out.println("hour: " + hour + " min: " + min + " second: " + sec);
int time = hour * 60 * 60 + min * 60 + sec;
System.out.println("通话时间长度为:"+time+"s");
String ans = "";
if(hour>0){
if(min > 0){
if(sec > 0){
ans=hour+"小时"+min+"分"+sec+"秒";
}else{
min = min -1;
sec = sec + 60;
ans=hour+"小时"+min+"分"+sec+"秒";
}
}else{
hour = hour - 1;
min = min + 60;
if(sec > 0){
ans=hour+"小时"+min+"分"+sec+"秒";
}else{
min = min -1;
sec = sec + 60;
ans=hour+"小时"+min+"分"+sec+"秒";
}
}
}
System.out.println(ans);
}
public static List<String> mySplit(String s) {
List<String> list = new ArrayList<String>();//建立List存放时间
String t = "";//临时字符串
s += ":";//一刀切上式
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == ':') {
list.add(t);//加入到list
t = "";
} else {
t += c;
}
}
return list;
}
}