参数索引和文件异常的问题

Ark_Xu 2010-06-23 12:08:49
有两个问题看书上网查还是不理解,求详解

Core Java 卷 I 第 8 版
P56
1.如果需要多次对日期操作才能实现对每一部分进行格式化的目的就太笨拙了。为此,可以采用一个格式化的字符串指出要被格式化的参数索引。索引必须跟在%后面,并以$终止。例如,
System.out.printf("%1$s %2$tB %2$te, %2$tY", "Due date:", new Date());
打印
Due date: Februry 9, 2004
还可以选择使用<标志。它指示前面格式说明中的参数将再次使用。也就是说,下列语句将产生与前面语句同样的输出结果。
System.out.printf("%s %tB %<te, %<tY", "Due date:", new Date());

----------------------------------------------------------

这里参数索引和 < 标志不理解,求详解


P58
2.当用命令行方式启动一个程序时,可以利用重定向将任意文件捆绑到System.in和System.out:
java MyProg < myfile.txt > output.txt
这样,就不必担心处理FileNotFoundException异常了

----------------------------------------------------------

这里也不明白什么意思和如何使用以及使用条件
...全文
114 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qianzhimeiying 2010-06-25
  • 打赏
  • 举报
回复
原本的默认标准输入是键盘,默认标准输出是屏幕,就是System.in和System.out
但是也可以用<和>重定向输入输出,<表示输入,>表示输出

1. 标准输入的控制
  语法:命令< 文件将文件做为命令的输入。
  例如:
  mail -s “mail test” wesongzhou@hotmail.com < file1 将文件file1 当做信件的内容,主
  题名称为mail test,送给收信人。
2. 标准输出的控制
  语法:命令> 文件将命令的执行结果送至指定的文件中。
  例如:
  ls -l > list 将执行“ls -l” 命令的结果写入文件list 中。
语法:命令>! 文件将命令的执行结果送至指定的文件中,若文件已经存在,则覆盖。
  例如:
  ls -lg >! list 将执行“ls - lg” 命令的结果覆盖写入文件list 中。
Ark_Xu 2010-06-24
  • 打赏
  • 举报
回复
第二个问题...呃...
高亮 2010-06-23
  • 打赏
  • 举报
回复
api的位置:

java.lang包中的String类中找下面的方法
static String format(String format, Object... args)
使用指定的格式字符串和参数返回一个格式化字符串。
点开方法找下面的链接
参数:
format - 格式字符串
args - 格式字符串中由格式说明符引用的参数。

点格式字符串可以跳转到format格式字符串的详细用法。内容比较长
qianzhimeiying 2010-06-23
  • 打赏
  • 举报
回复
1.printf的第一参数为输出的格式,后面的参数是可变长的,表示待输出的对象
其中,%s表示输出字符串,%t表示格式化日期
支持多个参数时,可以在%s中间插入变量编号,1$表示第一个字符串,2$表示第二个字符串
%t之后用特定的字母表示不同的输出格式
y表示2位年份,m表示月份,d表示日号,Y表示4位年份,B表示月份的完整名
所以整条命令就是
System.out.printf("%1$s %2$tB %2$te, %2$tY", "Due date:", new Date());
打印 第一个参数字符串Due date:
然后是第二参数date的日期,%2$tB->月份全称,%2$te->日号,%2$tY->4位年份

2.既然文件已经重定向了,就是说肯定存在拉,当然不会出现FileNotFoundException异常

高亮 2010-06-23
  • 打赏
  • 举报
回复
System.out.printf("%1$s %2$tB %2$te, %2$tY", "Due date:", new Date());
1$是指从后面取第一个参数,就是"Due Data:"
2$就是new Data()
数字加$就是这么用的,具体后面的格式参考api吧。%s表示字符串%tb表示把Data对象格式化为月份.....

System.out.printf("%s %tB %<te, %<tY", "Due date:", new Date());
<的作用是继续用前面用到的参数(默认是依次取参数,每个%都要取一个的)

比如

System.out.printf("%s--%<s %s--%<s--%<s--%<s", "汉", "字");

输出为
run:
汉--汉 字--字--字--字
成功生成(总时间:0 秒)
printf的用法和C语言中的一样,如果了解C的这个函数就好理解了。
Ark_Xu 2010-06-23
  • 打赏
  • 举报
回复
这里说的重定向是什么?
Ark_Xu 2010-06-23
  • 打赏
  • 举报
回复
第 1 个问题理解了,谢谢两位
第 2 个还是没明白啊,能举个例子说说?

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧