2道简单的面试题求答案以验证

时间:2021-04-01 19:07:51
1、写一个函数 String getYesterday(String today){},只可以重要String基本类 不可以用data工具类
2、解析字符串,String getStr1(String Str,String flag),第一个参数指要输入的字符串,第二个代表要拆分的标志,比如说333113223zz,得到的应该是‘11’、‘22’,‘zz’。不可以用spli。

21 个解决方案

#1


第一题那么模糊,做不出来吧:"天朝六十年正月初九"和"20090116"完全不一样<(-︿-)>
第二题不限制用正则就用正则咯.

#2


楼上哥哥真风趣 不是脑筋急转弯 呵呵 不过我说漏一点today和yesterday都是8位数字的字符串比如说“20081112”,这里不考虑转换问题
第二题主要用subString

#3


取的最后两个日期减去1之后慢慢匹配吧,只是多写好多if else 还的判断闰年等等

#4


引用 2 楼 zhangzhifeng_ig 的回复:
楼上哥哥真风趣 不是脑筋急转弯 呵呵 不过我说漏一点today和yesterday都是8位数字的字符串比如说“20081112”,这里不考虑转换问题 
第二题主要用subString

答:解析字符串,String getStr1(String Str,String flag),你都没有说明: 这个flag是个什么标记?比如333113223zz,得到的应该是‘11’、‘22’,‘zz’。怎么得到的(即:没有看到 flag起作用啊)?

#5


第一问  不之所云
第二问  你都说了, 用substring , 你就自己截取贝, 从第几个开始截取几个 不就完了

#6


.........

#7


String getYesterday(String today){}
如果今天是2009-03-01,那么二月份的最后一天该怎么算?

#8


可能我表达没清楚
1、写一个函数 String getYesterday(String today){},只可以重要String基本类 不可以用data工具类 
    输入一个时间比如说20080101,应该得到20071231,不去计较数据验证。
2、解析字符串,String getStr1(String Str,String flag),第一个参数指要输入的字符串,第二个代表要拆分的标志,比如说333113223zz,得到的应该是‘11’、‘22’,‘zz’。不可以用spli。
    第二个就是说输入两个参数,以第一个是字符处比如“123a321aaa44”,第二个参数输入a,要得到“123”、“32”、“44”

#9


2
public static String[] liu_split(String strInfo, String strSplit) {

int size = 0;
int index = 0;
do {
size++;
index++;
index = strInfo.indexOf(strSplit, index);
} while (index != -1);
String[] arrRtn = new String[size]; 

int startIndex = 0;
int endIndex = 0;
for (int i = 0; i < size; i++) {
endIndex = strInfo.indexOf(strSplit, startIndex);
if (endIndex == -1) {
arrRtn[i] = strInfo.substring(startIndex);
} else {
arrRtn[i] = strInfo.substring(startIndex, endIndex);
}
startIndex = endIndex + 1;
}
return arrRtn;
}
}

#10


哪家单位的面试题?

#11


 路过

#12


引用 8 楼 zhangzhifeng_ig 的回复:
可能我表达没清楚 
1、写一个函数 String getYesterday(String today){},只可以重要String基本类 不可以用data工具类 
    输入一个时间比如说20080101,应该得到20071231,不去计较数据验证。 
2、解析字符串,String getStr1(String Str,String flag),第一个参数指要输入的字符串,第二个代表要拆分的标志,比如说333113223zz,得到的应该是‘11’、‘22’,‘zz’。不可以用spli。 
    第二个就是说输入两个参数,以第…

不可以用data工具类 

这个是不是不允许时间date类?

第二个问题并不难。
使用截取字符串的方法搞定。多做两次判断。具体做法可以参考9楼。不过感觉9楼的方法还有待补充。

#13


public class Test {

public static void main(String[] args) {
String s = "20090301";
System.out.println(getYesterday(s));
}

public static String getYesterday(String yesterday) {
String returnStr = "";
int year = 0;
int month = 0;
int day = 0;
year = Integer.parseInt(yesterday.substring(0, 4));
month = Integer.parseInt(yesterday.substring(4, 6));
day = Integer.parseInt(yesterday.substring(6, 8));
if(day != 1) {
day = day - 1;
} else {
switch(month) {
case 5:
case 7:
case 10:
case 12:
month = month - 1;
day = 30;
break;
case 1:
year = year - 1;
month = 12;
day = 30;
break;
case 3:
if(isLeapYear(year)) {
month = month - 1;
day = 29;
break;
} else {
month = month - 1;
day = 28;
break;
}
default:
month = month - 1;
day = 31;
break;
}
}

returnStr = "" + year + String.format("%02d", month) + String.format("%02d", day);

return returnStr;
}
public static boolean isLeapYear(int year) {
boolean b = false;
if(year % 400 == 0) {
b = true;
}
if((year % 4 == 0) && (year % 100 != 0)) {
b = true;
}
return b;
}
}

#14


第二道

import java.util.Scanner;
public class Split {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.print("str=");
String str = sc.nextLine();
System.out.print("flag=");
String flag = sc.nextLine();
String[] resultStr = getStr1(str,flag);
if(resultStr == null)
{
System.out.println(str);
}
else
{
for(String s:resultStr)
{
System.out.print(s+" ");
}
}
}
public static String[] getStr1(String str,String flag)
{
int index = 0;
int backIndex = 0;
//用来确定String数组的长度
int size = 0;
int resultStrIndex = 0;

do { 
size++; 
index++; 
index = str.indexOf(flag, index); 
} while (index != -1); 
String[] resultStr = new String[size];

while((index=str.indexOf(flag,backIndex))!=-1)
{
if(backIndex==index)
{
backIndex++;
}
else
{
resultStr[resultStrIndex++] = str.substring(backIndex, index);
backIndex = index ;
}
}
resultStr[resultStrIndex] = str.substring(backIndex);
return  resultStr;
}
}

#15


第一题: 可以参考JS 中的 Calendar  把每个月的最大天数列出来! 2月另外算 就可以了!  
第二题: 如果只能用subString 你就一个一个字符取!匹配flag 就是了! 把不是flag 的连续的 char 列出来就可以了!如果可以正则表达式可以 免得那么麻烦

#16


第一题13楼做得好啊

#17


拜13楼 晕死,当初我也是这个思路,就是没写这么明白,把闰年的判断加到switch里面了,有点乱糟糟的。

#18


第二题:

import java.util.ArrayList;
import java.util.Scanner;

public class SplitDemo {
public static void main(String[] args){
System.out.print("Input a string: ");
Scanner scan = new Scanner(System.in);
String s = new String();
if(scan.hasNext()){
s = scan.next();
}
System.out.print("Input a param: ");
Scanner scan1 = new Scanner(System.in);
String param = new String();
if(scan1.hasNext()){
param = scan1.next();
}
SplitDemo sd = new SplitDemo();
ArrayList list = sd.divString(s, param);
for(int i=0 ; i<list.size() ; i++){
System.out.print(list.get(i)+" ");
}
}

ArrayList divString(String s,String param){
ArrayList<String> list = new ArrayList<String>();
int index = 0;
CharSequence c = param.subSequence(0, param.length());
while(s.contains(c)){
String str = s.substring(0, s.indexOf(param, index));
list.add(str);
s = s.substring(s.indexOf(param, index)+param.length());
}
list.add(s);
return list;
}
}

#19


2题
有用正则的做法没哦

#20


化简为繁是现在面试准则?第一题Calendar第二题正则都是很简单就能出来的吧

#21


想想

#1


第一题那么模糊,做不出来吧:"天朝六十年正月初九"和"20090116"完全不一样<(-︿-)>
第二题不限制用正则就用正则咯.

#2


楼上哥哥真风趣 不是脑筋急转弯 呵呵 不过我说漏一点today和yesterday都是8位数字的字符串比如说“20081112”,这里不考虑转换问题
第二题主要用subString

#3


取的最后两个日期减去1之后慢慢匹配吧,只是多写好多if else 还的判断闰年等等

#4


引用 2 楼 zhangzhifeng_ig 的回复:
楼上哥哥真风趣 不是脑筋急转弯 呵呵 不过我说漏一点today和yesterday都是8位数字的字符串比如说“20081112”,这里不考虑转换问题 
第二题主要用subString

答:解析字符串,String getStr1(String Str,String flag),你都没有说明: 这个flag是个什么标记?比如333113223zz,得到的应该是‘11’、‘22’,‘zz’。怎么得到的(即:没有看到 flag起作用啊)?

#5


第一问  不之所云
第二问  你都说了, 用substring , 你就自己截取贝, 从第几个开始截取几个 不就完了

#6


.........

#7


String getYesterday(String today){}
如果今天是2009-03-01,那么二月份的最后一天该怎么算?

#8


可能我表达没清楚
1、写一个函数 String getYesterday(String today){},只可以重要String基本类 不可以用data工具类 
    输入一个时间比如说20080101,应该得到20071231,不去计较数据验证。
2、解析字符串,String getStr1(String Str,String flag),第一个参数指要输入的字符串,第二个代表要拆分的标志,比如说333113223zz,得到的应该是‘11’、‘22’,‘zz’。不可以用spli。
    第二个就是说输入两个参数,以第一个是字符处比如“123a321aaa44”,第二个参数输入a,要得到“123”、“32”、“44”

#9


2
public static String[] liu_split(String strInfo, String strSplit) {

int size = 0;
int index = 0;
do {
size++;
index++;
index = strInfo.indexOf(strSplit, index);
} while (index != -1);
String[] arrRtn = new String[size]; 

int startIndex = 0;
int endIndex = 0;
for (int i = 0; i < size; i++) {
endIndex = strInfo.indexOf(strSplit, startIndex);
if (endIndex == -1) {
arrRtn[i] = strInfo.substring(startIndex);
} else {
arrRtn[i] = strInfo.substring(startIndex, endIndex);
}
startIndex = endIndex + 1;
}
return arrRtn;
}
}

#10


哪家单位的面试题?

#11


 路过

#12


引用 8 楼 zhangzhifeng_ig 的回复:
可能我表达没清楚 
1、写一个函数 String getYesterday(String today){},只可以重要String基本类 不可以用data工具类 
    输入一个时间比如说20080101,应该得到20071231,不去计较数据验证。 
2、解析字符串,String getStr1(String Str,String flag),第一个参数指要输入的字符串,第二个代表要拆分的标志,比如说333113223zz,得到的应该是‘11’、‘22’,‘zz’。不可以用spli。 
    第二个就是说输入两个参数,以第…

不可以用data工具类 

这个是不是不允许时间date类?

第二个问题并不难。
使用截取字符串的方法搞定。多做两次判断。具体做法可以参考9楼。不过感觉9楼的方法还有待补充。

#13


public class Test {

public static void main(String[] args) {
String s = "20090301";
System.out.println(getYesterday(s));
}

public static String getYesterday(String yesterday) {
String returnStr = "";
int year = 0;
int month = 0;
int day = 0;
year = Integer.parseInt(yesterday.substring(0, 4));
month = Integer.parseInt(yesterday.substring(4, 6));
day = Integer.parseInt(yesterday.substring(6, 8));
if(day != 1) {
day = day - 1;
} else {
switch(month) {
case 5:
case 7:
case 10:
case 12:
month = month - 1;
day = 30;
break;
case 1:
year = year - 1;
month = 12;
day = 30;
break;
case 3:
if(isLeapYear(year)) {
month = month - 1;
day = 29;
break;
} else {
month = month - 1;
day = 28;
break;
}
default:
month = month - 1;
day = 31;
break;
}
}

returnStr = "" + year + String.format("%02d", month) + String.format("%02d", day);

return returnStr;
}
public static boolean isLeapYear(int year) {
boolean b = false;
if(year % 400 == 0) {
b = true;
}
if((year % 4 == 0) && (year % 100 != 0)) {
b = true;
}
return b;
}
}

#14


第二道

import java.util.Scanner;
public class Split {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.print("str=");
String str = sc.nextLine();
System.out.print("flag=");
String flag = sc.nextLine();
String[] resultStr = getStr1(str,flag);
if(resultStr == null)
{
System.out.println(str);
}
else
{
for(String s:resultStr)
{
System.out.print(s+" ");
}
}
}
public static String[] getStr1(String str,String flag)
{
int index = 0;
int backIndex = 0;
//用来确定String数组的长度
int size = 0;
int resultStrIndex = 0;

do { 
size++; 
index++; 
index = str.indexOf(flag, index); 
} while (index != -1); 
String[] resultStr = new String[size];

while((index=str.indexOf(flag,backIndex))!=-1)
{
if(backIndex==index)
{
backIndex++;
}
else
{
resultStr[resultStrIndex++] = str.substring(backIndex, index);
backIndex = index ;
}
}
resultStr[resultStrIndex] = str.substring(backIndex);
return  resultStr;
}
}

#15


第一题: 可以参考JS 中的 Calendar  把每个月的最大天数列出来! 2月另外算 就可以了!  
第二题: 如果只能用subString 你就一个一个字符取!匹配flag 就是了! 把不是flag 的连续的 char 列出来就可以了!如果可以正则表达式可以 免得那么麻烦

#16


第一题13楼做得好啊

#17


拜13楼 晕死,当初我也是这个思路,就是没写这么明白,把闰年的判断加到switch里面了,有点乱糟糟的。

#18


第二题:

import java.util.ArrayList;
import java.util.Scanner;

public class SplitDemo {
public static void main(String[] args){
System.out.print("Input a string: ");
Scanner scan = new Scanner(System.in);
String s = new String();
if(scan.hasNext()){
s = scan.next();
}
System.out.print("Input a param: ");
Scanner scan1 = new Scanner(System.in);
String param = new String();
if(scan1.hasNext()){
param = scan1.next();
}
SplitDemo sd = new SplitDemo();
ArrayList list = sd.divString(s, param);
for(int i=0 ; i<list.size() ; i++){
System.out.print(list.get(i)+" ");
}
}

ArrayList divString(String s,String param){
ArrayList<String> list = new ArrayList<String>();
int index = 0;
CharSequence c = param.subSequence(0, param.length());
while(s.contains(c)){
String str = s.substring(0, s.indexOf(param, index));
list.add(str);
s = s.substring(s.indexOf(param, index)+param.length());
}
list.add(s);
return list;
}
}

#19


2题
有用正则的做法没哦

#20


化简为繁是现在面试准则?第一题Calendar第二题正则都是很简单就能出来的吧

#21


想想