黑马程序员技术交流社区

标题: 如何指定非法字符异常(当输入非字符串就提示) [打印本页]

作者: 胡建伟    时间: 2014-4-16 17:33
标题: 如何指定非法字符异常(当输入非字符串就提示)
本帖最后由 胡建伟 于 2014-4-16 23:12 编辑

  1. <P>package com.itheima.com;

  2. import java.util.Scanner;
  3. import java.util.Comparator;
  4. import java.util.Set;
  5. import java.util.TreeSet;
  6. public class Demo {

  7. /**
  8. * 需求: 编写程序,循环接收用户从键盘输入多个字符串,直到输入“quit”时循环结束,并将所有已输入的字符串按字典顺序倒序打印。
  9. *
  10. */
  11. public static void main(String[] args) {
  12. Scanner sc = new Scanner(System.in);
  13. System.out.println("请输入多个字符串,输入end时结束:");
  14. Set<String> ts = new TreeSet<>(new Comparator<String>() {
  15. @Override
  16. public int compare(String str1, String str2) {
  17. int num = str2.compareTo(str1);
  18. return num == 0 ? 1:num; //如果num为零返回一个正数或一个负数,num不为零就
  19. }
  20. });
  21. while(true) { </P>
  22. <P>if(line.equals("quit")) { break; }

  23. try {
  24. String x = String.format(line);
  25. ts.add(x);//将字符串添加到集合
  26. } catch (Exception e) {
  27. System.out.println("您输入的字符非法,请重新输入:");//如果录入非字符串元素就提示
  28. }
  29. }
  30. //增强for循环遍历集合
  31. for (String str : ts) {
  32. System.out.println(str);//将集合中的所有元素打印
  33. }
  34. }

  35. }


  36. </P>
复制代码
问题:1,上述代码中指定输入非法字符即非字符串时候应该给与提示,但是运行结果不成功,没有实现?
          如果输入null,空格,\tab,等该怎么提示,这个异常抛出代码该怎么写呢

作者: 雨落千木的时节    时间: 2014-4-16 20:53
try{
...
}catch(Exception e){
        e.printStackTrace(""您输入的字符非法,请重新输入:"");
}

您这样写试试
作者: 胡建伟    时间: 2014-4-16 21:21
雨落千木的时节 发表于 2014-4-16 20:53
try{
...
}catch(Exception e){

这样肯定不行撒,对于int型,如果输入非int型,就用NumberFormatException,但是对于限定字符串的指定异常,我就不知是哪个了???????
作者: 雨落千木的时节    时间: 2014-4-16 21:28
胡建伟 发表于 2014-4-16 21:21
这样肯定不行撒,对于int型,如果输入非int型,就用NumberFormatException,但是对于限定字符串的指定异常,我 ...

我不了解了
作者: xtxiaolu    时间: 2014-4-16 21:45
本帖最后由 xtxiaolu 于 2014-4-16 21:48 编辑

/**
         * 5,程序启动后, 可以从键盘输入接收多个整数, 直到输入quit时结束输入. 把所有输入的整数倒序排列打印.
         */
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入字符串,当输入quit时结束:");
                Set<Integer> set = new TreeSet<>(new Comparator<Integer>() {     //创建一个TreeSet对象,并传入比较器

                        @Override
                        public int compare(Integer a1, Integer a2) {                        //重写compare方法
                                //int nem = a2 - a1;   //也可以这么写但是开发的时候一般用下面的
                                int nem = a2.compareTo(a1);                                        //倒序排列
                                return nem == 0 ? 1 : nem;                        //如果对象为零返回一个整数或负数,nem不为零就放回nem
                        }
                });

                while (true) {                                                //定义一个无限循环
                        String line = sc.nextLine();        //将键盘录入的字符串储存在line内
                        if (line.equals("quit")) {                //如果录入的是quit
                                break;                                                //就跳出循环
                        }

                        try {
                                int x = Integer.parseInt(line);                        //录入的不是quit,将这个数字字符换成数字
                                set.add(x);                                                        //添加到集合中
                        } catch (NumberFormatException e) {
                                System.out.println("您输入的字符是非法字符,请重新输入");   //如果录入的是小数或过大的数提示重新输入
                        }

                }
                for (Integer integer : set) {                        //遍历集合        
                        System.out.println(integer);                //将集合中的所有元素打印
                }

        }



自己建一个class不要建主函数让后拷贝到里面
作者: 随风而去    时间: 2014-4-16 21:52
首先 你的代码无法运行 ,
while(true) { </P>
<P>if(line.equals("quit")) { break; }
这是什么代码  line 是哪里来的
你的键盘输入的字符串存入  set 集合了吗?? 要么就是你的代码不完整。
此为修改后的代码  使用了正则表达式
package test;

import java.util.Scanner;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Demo {

        /**
         * 需求: 编写程序,循环接收用户从键盘输入多个字符串,直到输入“quit”时循环结束,并将所有已输入的字符串按字典顺序倒序打印。
         *
         */
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入多个字符串,输入end时结束:");
                Set<String> ts = new TreeSet<>(new Comparator<String>() {
                        @Override
                        public int compare(String str1, String str2) {
                                int num = str2.compareTo(str1);
                                return num == 0 ? 1 : num; // 如果num为零返回一个正数或一个负数,num不为零就
                        }
                });
                //使用正则表达式除去特殊的字符,如果是特殊字符则不添加
                Pattern p = Pattern.compile("[a-zA-Z0-9]*"); //正则表达式--匹配项
                Matcher m ;//比较器
                while (true) {
                        String line = sc.nextLine();
                        m = p.matcher(line);
                        if(m.matches()){
                                ts.add(line);
                        }else{
                                System.out.println("您输入的字符非法,请重新输入:");// 如果录入非字符串元素就提示
                        }
                        if (line.equals("quite")) {
                                break;
                        }
                }
                // 增强for循环遍历集合
                for (String str : ts) {
                        System.out.println(str);// 将集合中的所有元素打印
                }
        }

}



作者: 泡沫__opt    时间: 2014-10-27 10:44
我用“==quit”难怪不能break~~感谢大神代码~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2