zoukankan      html  css  js  c++  java
  • Java经典编程30题(下)

    21.写一个函数去掉一个字符串中单词间多余的空格,使得相邻两个单词间有且只有一个空格。例如当输入字符串是“Hello!_ _Game_programming_ _world!”时,调用该函数后字符串变为“Hello!_Game_programming_world!”。

    解答:

    /**

    * 去除字符串中多余的空格

    *

    * @param s

    * 需要处理的字符串

    * @return 处理后的字符串

    */

    public String trimSpace(String before) {

    String temp= “” + before.charAt(0);

    for (int i = 1; i < before.length(); i++) {

    char c = before.charAt(i);

    // 如果当前字符是空格

    if (c == ‘ ‘) {

    // 判断前一个不是是空格则添加,否则不添加

    if (before.charAt(i – 1) != ‘ ‘) {

    temp += c;

    }

    } else {

    temp += c;

    }

    }

    return temp;

    }

    22. 编写一个程序,用来计算1到100间所有整数的和是多少?

    解答:

    public static void GetSum()

    {

    int sum = 0;

    for(int i=1;i<=100;i++)

    {

    sum+=i;

    }

    System.out.println(“和为:”+sum);

    }

    23.请简单写出用JAVA连接Oracle数据库,并执行一条/SQL语句。(只需要写关键几条语句即可,/SQL语句:SELECT*FROM t_users WHERE users_id=‘1111’)

    解答:

    Class.forName(“oracle.jdbc.OracleDriver”);

    String url = “jdbc:oracle:thin:@127.0.0.1:1521:orcl”;

    String user = “scott”;

    String password = “tiger”;

    Connection con = DriverManager.getConnection(url, user, password);

    Statement stm = con.createStatement();

    ResultSet rs = stm

    .executeQuery(“SELECT*FROM t_users WHERE users_id=’1111′”);

    while (rs.next()) {

    // 取值

    }

    rs.close();

    stm.close();

    con.close();

    24.在web应用开发过程中经常遇到输出某种编码的字符,如从GBK到iso8859-1等,如何输出一个某种编码的字符串?

    public static String translate(String str) {

    String tempStr = “”;

    try {

    tempStr = new String(str.getBytes(“ISO-8859-1″), “GBK”);

    tempStr = tempStr.trim();

    } catch (Exception e) {

    System.err.println(e.getMessage());

    }

    return tempStr;

    }

    25. 请写出一个公用方法,输入String返回该串是否含有非空字符,并写出junit的测试用例

    答:

    public class TestString {

    public static boolean hasBlank(String str) {

    if (str.endsWith(“”) || str.startsWith(“”)) {

    return false;

    } else {

    String[] strs = str.split(“”);

    if (strs.length == 1) {

    return false;

    }

    }

    return true;

    }

    @Test

    public void testFun() {

    System.out.println(TestString.hasBlank(“test”));

    }

    }

    26. JAVA实现一种排序

    答:用插入法进行排序代码如下

    package com.tarena;

    import java.util.*;

    class InsertSort

    {

    ArrayList list;

    public InsertSort(int num,int mod)

    {

    list = new ArrayList(num);

    Random rand = new Random();

    System.out.println(“The ArrayList Sort Before:”);

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

    {

    list.add(new Integer(Math.abs(rand.nextInt()) % mod + 1));

    System.out.println(“list[“+i+”]=”+list.get(i));

    }

    }

    public void SortIt()

    {

    Integer tempInt;

    int MaxSize=1;

    for(int i=1;i<list.size();i++)

    {

    tempInt = (Integer)list.remove(i);

    if(tempInt.intValue()>=((Integer)list.get(MaxSize-1)).intValue())

    {

    list.add(MaxSize,tempInt);

    MaxSize++;

    System.out.println(list.toString());

    }

    else

    {

    for (int j=0;j<MaxSize ;j++ )

    {

    if (((Integer)list.get(j)).intValue()>=tempInt.intValue())

    {

    list.add(j,tempInt);

    MaxSize++;

    System.out.println(list.toString());

    break;

    }

    }

    }

    }

    System.out.println(“The ArrayList Sort After:”);

    for(int i=0;i<list.size();i++)

    {

    System.out.println(“list[“+i+”]=”+list.get(i));

    }

    }

    public static void main(String[] args)

    {

    InsertSort sort = new InsertSort(10,100);

    sort.SortIt();

    }

    }

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

    答:

    package com.tarena;

    public class SplitString {

    String SplitStr;

    int SplitByte;

    public SplitString(String str, int bytes) {

    SplitStr = str;

    SplitByte = bytes;

    System.out.println(“The String is:” + SplitStr + “;SplitBytes=”

    + SplitByte);

    }

    public void SplitIt()

    {

    int loopCount;

    loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/SplitByte+1);

    System.out.println(“Will Split into “+loopCount);

    for (int i=1;i<=loopCount ;i++ )

    {

    if (i==loopCount){

    System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()));

    } else {

    System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte)));

    }

    }

    } public static void main(String[] args) {

    SplitString ss = new SplitString(

    “test中dd文dsaf中男大3443n中国43中国人0ewldfls=103″, 4);

    ss.SplitIt();

    }

    }

    28. 编写程序将由数字及字符组成的字符串中的数字截取出来并按顺序输出,例如:“ABC137GMNQQ2049PN5FFF”输出结果应该为01234579

    答:

    package com.tarena;

    import java.util.Arrays;

    public class NumberSplitChar {

    public static void main(String[] args) {

    String str=”ABC137GMNQQ2049PN5FFF”;

    char[] beforechars=str.toCharArray();

    char[] afterchars=new char[beforechars.length];

    int j=0;

    for(int i=0;i<beforechars.length;i++){

    if(beforechars[i]>=’0′ && beforechars[i]<=’9′){

    afterchars[j++]=beforechars[i];

    }

    }

    Arrays.sort(afterchars);

    for(int i=(afterchars.length-j);i<afterchars.length;i++){

    System.out.print(afterchars[i]);

    }

    }

    }

    29. 请用JAVA实现两个类,分别实现堆栈(Stack)和队列(Queue)操作。

    答:public class MyStack {

    private List list;

    public MyStack(){

    list = new ArrayList();

    }

    public boolean isEmpty(){

    return list.size() == 0;

    }

    public void push(Object obj){

    list.add(obj);

    }

    public Object pop(){

    if(list.size()>0){

    Object obj = list.get(list.size()-1);

    list.remove(list.size()-1);

    return obj;

    }else{

    return null;

    }

    }

    public int getNumber(){

    return list.size();

    }

    }

    class IntegerQueue {

    public int[] integerQueue;// 用来当队列

    public int tail;// 队尾

    public int size;// 队的长度,也可以设置一个默认值,溢出时从新申请

    public IntegerQueue(int size) {

    integerQueue = new int[size];

    this.size = size;

    tail = 0;

    }

    public void inQueue(int i) {

    if (tail < size) {

    this.integerQueue[tail] = i;

    tail++;

    } else {

    System.err.println(“溢出啦!”);

    }

    }

    public int outQueue() {

    if (tail >= 0) {

    int tmp = this.integerQueue[tail];

    tail–;

    return tmp;

    } else {

    System.err.println(“队列为空!”);

    throw new RuntimeException();

    }

    }

    }

    30. 假定屏幕的像素宽度为screenWidth,写一个函数计算一个字符串需要分成几行显示。

    要求:

    1)、每行应尽可能多地显示字符,但不能有字符部分或完全显示在屏幕外。超过部分的字符换下一行显示。

    2)、每个字符的像素宽度不一样,每个字符的像素宽度不一样。用int GetCharWidth(char c)获得每个字符的像素宽度。

    /**

    * 计算一个字符串可以分多少行进行显示

    *

    * @param s

    * 原始字符串

    * @param screenWidth

    * 屏幕宽度

    * @return 行数

    */

    int calcLineNum(String s, int screenWidth) {

    int length = 0;

    // 行数

    int n = 0;

    // 统计长度

    for (int i = 0; i < s.length(); i++) {

    // 当前字符的宽度

    int charLen = GetCharWidth(s.charAt(i));

    // 总长度增加

    length += charLen;

    // 如果达到屏幕宽度

    if (length > screenWidth) {

    n++; // 行数+1

    length = charLen; // 重新计算长度

    }

    }

    // 最后一行处理

    if (length > 0) {

    n++;

    }

    return n;

    }

    1、转载来源于 https://blog.csdn.net/wickedvalley/article/details/51589792

    2、想要转载请注明转载来源

  • 相关阅读:
    Split Temporary Variable
    Introduce Explaining Variable
    Replace Temp with Query
    Extract Method
    自测代码的价值
    代码的坏味道
    Divergent Change & Shotgun Surgery
    Large Class
    Long Method
    Duplicated Code
  • 原文地址:https://www.cnblogs.com/pressur/p/11191313.html
Copyright © 2011-2022 走看看