一个java练习题,题目如下。希望能给个程序参考下(本人初学java)

一个java练习题,题目如下。希望能给个程序参考下(本人初学java),第1张

驼峰命名:

package comweixindto;

import javautilDate;

public class Student {

private String name;

private char sex;

private int age;

private String phone;

private String majorName;

private String address;

private Date registDate;

public String getName() {

return name;

}

public void setName(String name) {

thisname = name;

}

public char getSex() {

return sex;

}

public void setSex(char sex) {

thissex = sex;

}

public int getAge() {

return age;

}

public void setAge(int age) {

thisage = age;

}

public String getPhone() {

return phone;

}

public void setPhone(String phone) {

thisphone = phone;

}

public String getMajorName() {

return majorName;

}

public void setMajorName(String majorName) {

thismajorName = majorName;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

thisaddress = address;

}

public Date getRegistDate() {

return registDate;

}

public void setRegistDate(Date registDate) {

thisregistDate = registDate;

}

}

1判断身份z:要么是15位,要么是18位,最后一位可以为字母,并写程序提出其中的年月日。

答:我们可以用正则表达式来定义复杂的字符串格式,(\d{17}[0-9a-zA-Z]|\d{14}[0-9a-zA-Z])可以用来判断是否为合法的15位或18位身份z号码。

因为15位和18位的身份z号码都是从7位到第12位为身份z为日期类型。这样我们可以设计出更精确的正则模式,使身份z号的日期合法,这样我们的正则模式可以进一步将日期部分的正则修改为[12][0-9]{3}[01][0-9][123][0-9],当然可以更精确的设置日期。

在jdk的javautilRegex包中有实现正则的类,Pattern和Matcher。以下是实现代码:

import javautilregexMatcher;

import javautilregexPattern;

public class RegexTest {

/

@param args

/

public static void main(String[] args) {

// 测试是否为合法的身份z号码

String[] strs = { "130681198712092019", "13068119871209201x",

"13068119871209201", "123456789012345", "12345678901234x",

"1234567890123" };

Pattern p1 = Patterncompile("(\\d{17}[0-9a-zA-Z]|\\d{14}[0-9a-zA-Z])");

for (int i = 0; i < strslength; i++) {

Matcher matcher = p1matcher(strs[i]);

Systemoutprintln(strs[i] + ":" + matchermatches());

}

Pattern p2 = Patterncompile("\\d{6}(\\d{8})"); // 用于提取出生日字符串

Pattern p3 = Patterncompile("(\\d{4})(\\d{2})(\\d{2})");// 用于将生日字符串进行分解为年月日

for (int i = 0; i < strslength; i++) {

Matcher matcher = p2matcher(strs[i]);

boolean b = matcherfind();

if (b) {

String s = matchergroup(1);

Matcher matcher2 = p3matcher(s);

if (matcher2find()) {

Systemout

println("生日为" + matcher2group(1) + "年"

+ matcher2group(2) + "月"

+ matcher2group(3) + "日");

}

}

}

}

}

1、编写一个程序,将atxt文件中的单词与btxt文件中的单词交替合并到ctxt文件中,atxt文件中的单词用回车符分隔,btxt文件中用回车或空格进行分隔。

答:

package cnitcast;

import javaioFile;

import javaioFileReader;

import javaioFileWriter;

public class MainClass{

public static void main(String[] args) throws Exception{

FileManager a = new FileManager("atxt",new char[]{'\n'});

FileManager b = new FileManager("btxt",new char[]{'\n',' '});

FileWriter c = new FileWriter("ctxt");

String aWord = null;

String bWord = null;

while((aWord = anextWord()) !=null ){

cwrite(aWord + "\n");

bWord = bnextWord();

if(bWord != null)

cwrite(bWord + "\n");

}

while((bWord = bnextWord()) != null){

cwrite(bWord + "\n");

}

cclose();

}

}

class FileManager{

String[] words = null;

int pos = 0;

public FileManager(String filename,char[] seperators) throws Exception{

File f = new File(filename);

FileReader reader = new FileReader(f);

char[] buf = new char[(int)flength()];

int len = readerread(buf);

String results = new String(buf,0,len);

String regex = null;

if(seperatorslength >1 ){

regex = "" + seperators[0] + "|" + seperators[1];

}else{

regex = "" + seperators[0];

}

words = resultssplit(regex);

}

public String nextWord(){

if(pos == wordslength)

return null;

return words[pos++];

}

}

1、编写一个程序,将d:\java目录下的所有java文件复制到d:\jad目录下,并将原来文件的扩展名从java改为jad。

(大家正在做上面这道题,网上迟到的朋友也请做做这道题,找工作必须能编写这些简单问题的代码!)

答:listFiles方法接受一个FileFilter对象,这个FileFilter对象就是过虑的策略对象,不同的人提供不同的FileFilter实现,即提供了不同的过滤策略。

import javaioFile;

import javaioFileInputStream;

import javaioFileOutputStream;

import javaioFilenameFilter;

import javaioIOException;

import javaioInputStream;

import javaioOutputStream;

public class Jad2Java {

public static void main(String[] args) throws Exception {

File srcDir = new File("java");

if(!(srcDirexists() && srcDirisDirectory()))

throw new Exception("目录不存在");

File[] files = srcDirlistFiles(

new FilenameFilter(){

public boolean accept(File dir, String name) {

return nameendsWith("java");

}

}

);

Systemoutprintln(fileslength);

File destDir = new File("jad");

if(!destDirexists()) destDirmkdir();

for(File f :files){

FileInputStream fis = new FileInputStream(f);

String destFileName = fgetName()replaceAll("\\java$", "jad");

FileOutputStream fos = new FileOutputStream(new File(destDir,destFileName));

copy(fis,fos);

fisclose();

fosclose();

}

}

private static void copy(InputStream ips,OutputStream ops) throws Exception{

int len = 0;

byte[] buf = new byte[1024];

while((len = ipsread(buf)) != -1){

opswrite(buf,0,len);

}

}

}

由本题总结的思想及策略模式的解析:

1

class jad2java{

1 得到某个目录下的所有的java文件集合

11 得到目录 File srcDir = new File("d:\\java");

12 得到目录下的所有java文件:File[] files = srcDirlistFiles(new MyFileFilter());

13 只想得到java的文件: class MyFileFilter implememyts FileFilter{

public boolean accept(File pathname){

return pathnamegetName()endsWith("java")

}

}

2将每个文件复制到另外一个目录,并改扩展名

21 得到目标目录,如果目标目录不存在,则创建之

22 根据源文件名得到目标文件名,注意要用正则表达式,注意的转义。

23 根据表示目录的File和目标文件名的字符串,得到表示目标文件的File。

//要在硬盘中准确地创建出一个文件,需要知道文件名和文件的目录。

24 将源文件的流拷贝成目标文件流,拷贝方法独立成为一个方法,方法的参数采用抽象流的形式。

//方法接受的参数类型尽量面向父类,越抽象越好,这样适应面更宽广。

}

分析listFiles方法内部的策略模式实现原理

File[] listFiles(FileFilter filter){

File[] files = listFiles();

//Arraylist acceptedFilesList = new ArrayList();

File[] acceptedFiles = new File[fileslength];

int pos = 0;

for(File file: files){

boolean accepted = filteraccept(file);

if(accepted){

//acceptedFilesListadd(file);

acceptedFiles[pos++] = file;

}

}

ArrayscopyOf(acceptedFiles,pos);

//return (File[])accpetedFilesListtoArray();

}

1、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”。

答:

首先要了解中文字符有多种编码及各种编码的特征。

假设n为要截取的字节数。

public static void main(String[] args) throws Exception{

String str = "我a爱中华abc我爱传智def';

String str = "我ABC汉";

int num = trimGBK(strgetBytes("GBK"),5);

Systemoutprintln(strsubstring(0,num) );

}

public static int trimGBK(byte[] buf,int n){

int num = 0;

boolean bChineseFirstHalf = false;

for(int i=0;i<n;i++)

{

if(buf[i]<0 && !bChineseFirstHalf){

bChineseFirstHalf = true;

}else{

num++;

bChineseFirstHalf = false;

}

}

return num;

}

1、有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。

答:哈哈,其实包含中文字符、英文字符、数字字符原来是出题者放的烟雾d。

String content = “中国aadf的111萨bbb菲的zz萨菲”;

HashMap map = new HashMap();

for(int i=0;i<contentlength;i++)

{

char c = contentcharAt(i);

Integer num = mapget(c);

if(num == null)

num = 1;

else

num = num + 1;

mapput(c,num);

}

for(MapEntrySet entry : map)

{

systemoutprintln(entrygetkey() + “:” + entrygetValue());

}

估计是当初面试的那个学员表述不清楚,问题很可能是:

如果一串字符如"aaaabbc中国1512"要分别统计英文字符的数量,中文字符的数量,和数字字符的数量,假设字符中没有中文字符、英文字符、数字字符之外的其他特殊字符。

int engishCount;

int chineseCount;

int digitCount;

for(int i=0;i<strlength;i++)

{

char ch = strcharAt(i);

if(ch>=’0’ && ch<=’9’)

{

digitCount++

}

else if((ch>=’a’ && ch<=’z’) || (ch>=’A’ && ch<=’Z’))

{

engishCount++;

}

else

{

chineseCount++;

}

}

Systemoutprintln(……………);

System类位于javalang包下,不能被实例化,该类包含类一系列静态的成员和方法,其中包括标准的输入流对象in,输出流对象out,in是System类的一个静态成员,一个标准的输入流对象(InputStream),由系统自动创建,通过Systemin直接引用,可以从控制台读取输入信息。

以上就是关于一个java练习题,题目如下。希望能给个程序参考下(本人初学java)全部的内容,包括:一个java练习题,题目如下。希望能给个程序参考下(本人初学java)、求java 上机练习题、Java练习编写一个程序能够对学生对象进行插入、修改、删除、浏览、统计人数等功能。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9969469.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存