`

java解惑(谜题16到20)

阅读更多
谜题16:行打印程序

public class Main {

	public static void main(String[] args) {
//		Note; \u000A is Unicode representation of linefeed (LF)
		char c = 0x000A;
		System.out.println(c);
	}

}

以上程序是平台无关的,在任何平台都发生编译出错,因为\u000A 是回车换行符
除非确实是必须的,否则就不要使用Unicoe转义字符
如果改为:
char c ='\n';
System.out.println(c);

它是平台相关的,在某些平台,unix将打印两个完整的行分隔符,在windows,可能不会。

谜题18:字符串奶酪
public class Main {

	public static void main(String[] args) throws UnsupportedEncodingException {
		byte bytes[] = new byte[256];
		for (int i = 0; i < 256; i++) {
			bytes[i] = (byte) i;
		}
		String str = new String(bytes);   //使用的是默认字符集
		
		for (int i = 0; i < str.length(); i++) {
			System.out.print((int) str.charAt(i) + " ");
		}
		
		Charset c= Charset.defaultCharset(); //默认字符集
		System.out.println("\n"+c.displayName());      //GBK
	}

}

打印出什么呢???
0到127,但是后面128个数是65533。。。。。why?
罪魁祸首是new String(byte[])构造函数,它使用了平台的默认字符集
谜题19:漂亮的火花
public class Main19 {
	public static void main(String[] args) {

		System.out.println(classify('n') + classify('+') + classify('2'));

	}

	private static String classify(char c) {

		if ("0123456789".indexOf(c) >= 0)
			return "number ";

		if ("abcdefghijklmnopqrstuvwxyz".indexOf(c) >= 0)
			return "letter ";
		
[b]/*		
  operators not supported yet
 if ("+-*/&|!=".indexOf(c) >= 0) 
			return "operator ";
		*/[/b]
	
		return "unknown ";
	}
}

编译不通过,不建议使用块注释,使用行注释
谜题20:我的类是什么
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main20 {
	public static void main(String[] args) {

		System.out.println(Main20.class.getName().replaceAll(".", "/")+".class"); //
		System.out.println(Main20.class.getName().replaceAll("\\.", "/")+".class"); //只替换点
		System.out.println(Main20.class.getName().replaceAll(Pattern.quote("."),"/")+".class");
		
//		[color=red]System.out.println(Main20.class.getName().replaceAll("\\.",File.separator)+".class"); [/color]
		System.out.println(Main20.class.getName().replaceAll("\\.",Matcher.quoteReplacement(File.separator))+".class"); 
		System.out.println(Main20.class.getName().replace(".",File.separator)+".class");  //replace(CharSequence,CharSequence),字符串常量作参数
		System.out.println(Main20.class.getName().replace('.',File.separatorChar)+".class");  //replace(char,char)
	}
}


执行结果:
/////////////.class  (解释:正则表达式,将每个字符都用”/“代替)
chapter2/Main20.class
chapter2/Main20.class
(解释:出错,windows的文件分隔符是反斜杠"\",在替代字符串中出现的反斜杠会把随后的字符进行转义,如果是单独的一个反斜杠,是无效的)
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
at java.lang.String.charAt(Unknown Source)
at java.util.regex.Matcher.appendReplacement(Unknown Source)
at java.util.regex.Matcher.replaceAll(Unknown Source)
at java.lang.String.replaceAll(Unknown Source)
chapter2\Main20.class
chapter2\Main20.class
chapter2\Main20.class
分享到:
评论

相关推荐

    java解惑 java 表达式谜题 java 字符谜题 java 循环谜题 java 异常谜题

    总结,Java编程中的谜题涵盖了许多方面,从基础语法到高级特性,每一个谜题都是提升编程技巧的机会。通过深入学习和实践,你可以逐一解开这些谜题,成为一名更优秀的Java开发者。不断探索和理解Java的内在机制,将使...

    Java解惑/Java谜题(CHM)

    我整理出来的Java解惑/谜题的CHM版本,包括目录、全文搜索和收藏夹。比目前Word/PDF版本的多个目录,比TXT版本的多一些格式。-- 如果不能打开CHM,请按下面方法解决:-- 右键点击chm文档,查看属性,可以看到...

    JAVA解惑(JAVA谜题) 中文版(PDF)

    ### JAVA解惑中的关键知识点解析 #### 谜题1:奇数性的判断 在《JAVA解惑》一书中,作者通过一系列实例介绍了Java编程语言中的一些不易掌握的知识点。其中一个例子是关于如何正确判断一个整数是否为奇数。 **原始...

    java解惑(java谜题)中文版的

    《Java解惑》是一本专为Java程序员设计的书籍,旨在揭示编程中常见的陷阱、误解和易犯的错误。这本书的中文版使得更多的中国开发者能够深入理解这些“谜题”,提高编程技能。Java Puzzlers是由Java之父James Gosling...

    java解惑 PDF版

    文档《java解惑 PDF版》中列举了95个这样的谜题,每个谜题都旨在帮助开发者理解并纠正一些常见的错误理解。以下是根据提供的部分内容解析的几个相关知识点。 ### 表达式谜题与取余操作符(%)的行为 在Java中,...

    java谜题解惑 中文chm

    在每个谜题之后都有详细的解惑方案,这些方案在给出那些实际行为与表面上迥异的程序行为的简单解释的同时,更向读者展示了如何一劳永逸地避免底层的陷阱与缺陷。 本书以轻松诙谐的语言,寓教于乐的方式,由浅入深、...

    java解惑 书籍类 谜题

    ### Java解惑 书籍类 谜题 #### Java谜题1——表达式谜题 **谜题1:奇数性** 本节讨论了一个看似简单的Java方法,旨在判断一个整数是否为奇数: ```java public static boolean isOdd(int i) { return i % 2 ==...

    Java解惑(谜题)CHM中英文双版本

    谜题16:行打印程序 谜题17:嗯? 谜题18:字符串奶酪 谜题19:漂亮的火花(块注释符) 谜题20:我的类是什么? 谜题21:我的类是什么?第2幕 谜题22:URL的愚弄 谜题23:不劳无获 Java谜题3——循环谜题 ...

    《Java Pazzlers》Java解惑.pdf 书签齐全

    该书特写了95个有关Java或其类库的陷阱和缺陷的谜题,其中大多数谜题都采用了短程序的方式,这些程序的行为与其看似的大相径庭。在每个谜题之后都给出了详细的解惑方案,这些解惑方案超越了对程序行为的简单解释,向...

    JAVA面试谜题解惑.pdf

    ### JAVA面试谜题解惑知识点解析 #### 表达式谜题:奇数性检查方法的缺陷 **题目背景:** 题目中提到的谜题旨在检验面试者对Java中的基本数学运算符及其行为的理解程度。具体来说,是针对取余运算符`%`在处理整数...

    java解惑(+Java 解惑你知多少)

    本书特写了95个有关Java或其类库的陷阱和缺陷的谜题,其中大多数谜题都采用了短程序的方式,这些程序的行为与其看似的大相径庭。在每个谜题之后都给出了详细的解惑方案,这些解惑方案超越了对程序行为的简单解释,向...

    java解惑(源代码+教程)

    《Java解惑》是一本由Google工程师编写的经典教材,旨在帮助开发者解决在实际编程过程中遇到的困惑和误解。这本书通过一系列精心设计的“Java谜题”,揭示了语言中的一些不直观特性和陷阱,从而提升读者对Java深层...

    Javapuzzler+JAVA解惑 中英双语 完整源代码

    《Javapuzzler+JAVA解惑 中英双语 完整源代码》是一份集学习与实践于一体的Java编程资源,包含《Java Puzzlers》和《JAVA解惑》两部分,以及对应的完整源代码。这份资料对于深入理解Java语言的特性和陷阱,提升编程...

    java谜题解惑 中文版.rar

    java谜题解惑This Fifth Edition is completely revised and expanded to cover JavaScript as it is used in today's Web 2.0 applications. This book is both an example-driven programmer's guide and a keep-...

    java解惑95个谜题.doc

    以下是对这两个Java谜题的深入解析: 谜题1:奇数性 在这个问题中,我们有一个方法`isOdd(int i)`,它通过检查`i % 2`是否等于1来判断一个整数是否为奇数。然而,这个方法在处理负数时会出现问题,因为Java中的取余...

Global site tag (gtag.js) - Google Analytics