﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-小草的天空-文章分类-java</title><link>http://www.blogjava.net/xiaofei-suman/category/36461.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 13 Mar 2012 07:31:18 GMT</lastBuildDate><pubDate>Tue, 13 Mar 2012 07:31:18 GMT</pubDate><ttl>60</ttl><item><title>StringBuilder部分源码阅读</title><link>http://www.blogjava.net/xiaofei-suman/articles/370974.html</link><dc:creator>齐纳尔多</dc:creator><author>齐纳尔多</author><pubDate>Wed, 29 Feb 2012 03:01:00 GMT</pubDate><guid>http://www.blogjava.net/xiaofei-suman/articles/370974.html</guid><wfw:comment>http://www.blogjava.net/xiaofei-suman/comments/370974.html</wfw:comment><comments>http://www.blogjava.net/xiaofei-suman/articles/370974.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaofei-suman/comments/commentRss/370974.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaofei-suman/services/trackbacks/370974.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1. StringBuilder extends AbstractStringBuilder implements CharSequence, Serializable&nbsp;&nbsp; (1)包含2个属性-&gt;char[] value(底层数据结构是数组), int count(字符串长度) 这2个属性在AbstractStringBuilder定义&nbsp;&nbsp;&nbs...&nbsp;&nbsp;<a href='http://www.blogjava.net/xiaofei-suman/articles/370974.html'>阅读全文</a><img src ="http://www.blogjava.net/xiaofei-suman/aggbug/370974.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaofei-suman/" target="_blank">齐纳尔多</a> 2012-02-29 11:01 <a href="http://www.blogjava.net/xiaofei-suman/articles/370974.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转帖-String详解二:intern隐士</title><link>http://www.blogjava.net/xiaofei-suman/articles/370843.html</link><dc:creator>齐纳尔多</dc:creator><author>齐纳尔多</author><pubDate>Mon, 27 Feb 2012 06:53:00 GMT</pubDate><guid>http://www.blogjava.net/xiaofei-suman/articles/370843.html</guid><wfw:comment>http://www.blogjava.net/xiaofei-suman/comments/370843.html</wfw:comment><comments>http://www.blogjava.net/xiaofei-suman/articles/370843.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaofei-suman/comments/commentRss/370843.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaofei-suman/services/trackbacks/370843.html</trackback:ping><description><![CDATA[<div id="post_content" class="body">
<p>&nbsp;&nbsp;&nbsp;&nbsp;转帖地址：<a href="http://congmo.github.com/blog/2012/02/16/1-translationofstring/"><font color="#770000">http://congmo.github.com/blog/2012/02/16/1-translationofstring/</font></a>(葱末)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;规范化的字符串可节省空间，代价就是花费更多的CPU时间来检测存储在RAM中的字符串和替换字符串副本。规范化之后的字符串，不论存在多少引用，仅在RAM中存在一份。由于String是不可变的，所以比如两个不同的方法碰巧使用同一个字符串，那么它们就可以使用同一个String的副本。不论字符串的意思在不同的语境下是否相同，依旧可以共享，就好比sin可以是人名，当然也是三角函数中的函数名。共享重复字符串的过程就叫做规范化。String.intern()返回规范化的主字符串的引用。规范化之后的字符串可以直接使用==(比较引用)来比较两个字符串是否相等。由于String不可变的特性，可以节省很多空间。比如&#8221;pot&#8221;在&#8221;hippopotamus&#8221;中出现，那么就不需要创建新的字符串，额外分配新的空间(堆中的空间)，返回一个相应指向&#8221;hippopotamus&#8221;的引用即可。</p>
<h3 id="id8">为何要规范化</h3>
<p>规范化字符串有如下两个原因：</p><li>通过去除字符串字面值副本来节省空间(也就是字符串值在方法区中只有一份，其他全部是指向它的引用)。</li><li>使字符串比较变的很快。即使用equals比较规范化后的字符串也要快很多。 
<p>就比如，将文件中用逗号分隔的20000人的党籍读入HashMap，那么内存中就需要20000左右个字符串用来记录这些党籍。如果将字符串进行规范化，那么几十个就足矣。</p>
<h3 id="stringsubstring">规范化与String.substring()</h3>
<p>使用String.substring()时，JVM只在栈中分配一个String类型的引用，指向原始字符串的字面值。substring不需要额外分配空间，也不需要拷贝字符。String.substring不会对结果进行规范化。</p>
<p>注意：只要还有&#8221;活动&#8221;的子串指向原始字符串，那么垃圾回收期就没法回收它。</p>
<p>String.subString产生的空串也不用自动规范化，因此，空串也会导致长长的原始字符串没法被回收。</p>
<div class="highlight"><pre><code class="java"><span class="lineno">1</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span> <span class="n">args</span><span class="o">[]){</span>
<span class="lineno">2</span>         <span class="n">String</span> <span class="n">s</span> <span class="o">=</span> <span class="s">"a very long string"</span><span class="o">;</span>
<span class="lineno">3</span>         <span class="c1">// create an empty substring</span>
<span class="lineno">4</span>         <span class="n">String</span> <span class="n">e1</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="na">substring</span><span class="o">(</span> <span class="mi">0</span><span class="o">,</span><span class="mi">0</span><span class="o">);</span>
<span class="lineno">5</span>         <span class="c1">// make sure the empty string is canonical</span>
<span class="lineno">6</span>         <span class="n">String</span> <span class="n">e2</span> <span class="o">=</span> <span class="o">(</span> <span class="n">e1</span><span class="o">.</span><span class="na">length</span><span class="o">()</span> <span class="o">==</span><span class="mi">0</span><span class="o">)</span> <span class="o">?</span> <span class="s">""</span> <span class="o">:</span><span class="n">e1</span><span class="o">;</span>
<span class="lineno">7</span>         <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span> <span class="n">e1</span><span class="o">==</span><span class="s">""</span> <span class="o">);</span><span class="c1">// always prints false</span>
<span class="lineno">8</span>         <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span> <span class="n">e2</span><span class="o">==</span><span class="s">""</span> <span class="o">);</span><span class="c1">// always prints true   </span>
<span class="lineno">9</span> <span class="o">}</span>
</code></pre></div>
<h3 id="void">规范化与void字符串</h3>
<p>想要避免空串致使原始字符串不能被回收，就不要使用任何void字符串指向原始字符串。void字符串有3中：&#8221;&#8221;,&#8221; &#8220;,null。</p>
<div class="highlight"><pre><code class="java"><span class="lineno"> 1</span> <span class="kd">public</span> <span class="kd">final</span> <span class="kd">static</span> <span class="n">String</span> <span class="nf">possiblyEmpty</span><span class="o">(</span> <span class="n">StringpString</span><span class="o">)</span>
<span class="lineno"> 2</span> <span class="o">{</span>
<span class="lineno"> 3</span>    <span class="k">if</span><span class="o">(</span> <span class="n">pString</span><span class="o">==</span><span class="kc">null</span><span class="o">)</span> <span class="k">return</span><span class="s">""</span><span class="o">;</span>
<span class="lineno"> 4</span>    <span class="n">pString</span><span class="o">=</span><span class="n">pString</span><span class="o">.</span><span class="na">trim</span><span class="o">();</span>
<span class="lineno"> 5</span>    <span class="k">if</span><span class="o">(</span> <span class="n">pString</span><span class="o">.</span><span class="na">length</span><span class="o">()</span> <span class="o">==</span><span class="mi">0</span><span class="o">)</span> <span class="k">return</span><span class="s">""</span><span class="o">;</span>
<span class="lineno"> 6</span>    <span class="n">returnpString</span><span class="o">;</span>
<span class="lineno"> 7</span> <span class="o">}</span>
<span class="lineno"> 8</span> <span class="kd">public</span> <span class="kd">final</span> <span class="nf">staticStringpossiblyNull</span><span class="o">(</span> <span class="n">StringpString</span><span class="o">)</span>
<span class="lineno"> 9</span> <span class="o">{</span>
<span class="lineno">10</span>    <span class="k">if</span><span class="o">(</span> <span class="n">pString</span><span class="o">==</span><span class="kc">null</span><span class="o">)</span> <span class="n">returnnull</span><span class="o">;</span>
<span class="lineno">11</span>    <span class="n">pString</span><span class="o">=</span><span class="n">pString</span><span class="o">.</span><span class="na">trim</span><span class="o">();</span>
<span class="lineno">12</span>    <span class="k">if</span><span class="o">(</span> <span class="n">pString</span><span class="o">.</span><span class="na">length</span><span class="o">()</span> <span class="o">==</span><span class="mi">0</span><span class="o">)</span> <span class="n">returnnull</span><span class="o">;</span>
<span class="lineno">13</span>    <span class="n">returnpString</span><span class="o">;</span>
<span class="lineno">14</span> <span class="o">}</span>
<span class="lineno">15</span> <span class="kd">public</span> <span class="kd">final</span> <span class="nf">staticStringneverNull</span><span class="o">(</span> <span class="n">StringpString</span><span class="o">)</span>
<span class="lineno">16</span> <span class="o">{</span>
<span class="lineno">17</span>    <span class="cm">/* if pString is null, Java will throw an NullPointerException */</span>
<span class="lineno">18</span>    <span class="n">pString</span><span class="o">=</span><span class="n">pString</span><span class="o">.</span><span class="na">trim</span><span class="o">();</span>
<span class="lineno">19</span>    <span class="cm">/* if pString is empty or blank, throw a NullPointerException */</span>
<span class="lineno">20</span>    <span class="k">if</span><span class="o">(</span> <span class="n">pString</span><span class="o">.</span><span class="na">length</span><span class="o">()</span> <span class="o">==</span><span class="mi">0</span><span class="o">)</span> <span class="k">throw</span> <span class="n">newNullPointerException</span><span class="o">();</span>
<span class="lineno">21</span>    <span class="n">returnpString</span><span class="o">;</span>
<span class="lineno">22</span> <span class="o">}</span>
</code></pre></div>
<h3 id="id9">规范化疑难杂症</h3>
<p>所有字符串在编译期间被规范化，那么程序运行时产生的字符串就不能被规范化。这样比较恶心的一点是在大多数情况下程序可以正常运行，但是在特殊的情况下就会出错。就比如，使用==替代equals来比较两个字符串是否相等，绝大多数是可行的，因为字符串会被规范化，但是不排除特例，比如运行期间产生的字符串。</p>
<h3 id="new_string_string_">规范化与new String( String )</h3>
<p>新手喜欢用String s = new String( &#8220;hello&#8221; );代替String s = &#8220;hello&#8221;;</p>
<p>这与规范化正好相反，这样创建了一个全新的&#8221;hello&#8221;字符串，虽然有相同的字面值，但是不会被规范化。在两种场景下适合使用new来创建字符串：</p></li><li>预得到一个唯一的字符串同步对象。</li><li>为了不引用庞大的原始字符串。使用new来创建字符串，就可以使原始字符串被回收。如果只有几个很短的子串包含在一个庞大的字符串中，这时使用new来创建新的字符串是值得的。当然如果有众多的子串都要指向一个母串，就没有必要这样做了。 
<p>使用new String( String )就一定会创建一个全新的字符串吗？答案是肯定的。你可能以为JVM很智能，会将新创建的字符串规范化，然后返回指向母串的引用。但是语言规范中指出，new String()一定会创建一个全新的字符串，尽管JVM在理论上可以同String.substring(0)和String.intern.substring(0)一样进行规范化，防止出现多个拷贝。</p>
<p>这就引申出另外一个问题，s == s.substring(0)总是返回false吗？答案也是肯定的。</p>
<p>还有一个适合用new来创建字符串的地方，如下：</p>
<div class="highlight"><pre><code class="java"><span class="lineno">1</span> <span class="n">String</span> <span class="n">password</span> <span class="o">=</span> <span class="k">new</span> <span class="n">String</span><span class="o">(</span> <span class="n">jpassword</span><span class="o">.</span><span class="na">getPassWord</span><span class="o">()</span> <span class="o">);</span>
</code></pre></div>
<p>getPassWord方法返回一个字符数组(char<span>)，这么做并不愚蠢，在高安全性的场景下，就可以将char数组清空。</p>
<p>看下这段代码：String s = new String( &#8220;Hello&#8221; ); 当变量s所在的类被加载的时候，字面值&#8221;Hello&#8221;会被规范化，但是愚蠢的使用new String，会在堆中重新创建一份字面值&#8221;Hello&#8221;，地址与规范化后的&#8221;Hello&#8221;不同。在Sun的JVM中，规范化的字符串被存储在一个叫perm gen的特殊RAM区域，这个区域中JVM也加载类和存储本地编译后的代码，而且规范化后的字符串与存储在堆中的普通对象一样。如果这样写：String s = &#8220;Hello&#8221;，就不会重新创建&#8221;Hello&#8221;的副本，而是直接指向规范化后的字符串。</p>
<h3 id="id10">规范化与垃圾回收</h3>
<p>在JDK的早起版本中，由于JVM要持有存储规范化后字符串的HashTable的引用，以便检查新创建的字符串是否已在共享池中存在，这样就导致了规范化后的字符串没法被垃圾回收器回收。随着1.2版本中引入了弱引用之后，无用的规范化字符串就可以被回收了。</p>
<p>JDK1.2版本之后，规范化字符串在没用引用指向它时，可以被回收，而且规范化不是只发生在编译期。这样以编码的方式重新创建、规范化字符串时，新创建的字符串对象会变成唯一的原始字符串。这样做不会带来实际的问题，使用==来比较两个字符串包含的字符是否相等同样奏效。(这里理解的不是很好，我觉得应该是这样的：同一个字面值规范化后，之前的那个字面值的地址会被新地址替换掉)</p>
<h3 id="id11">溢出</h3>
<p>java.lang.OutOfMemoryError: String intern table overflow 表示规范化字符串太多。一些低版本的JVM规定规范化字符串不能超过64K(大约50000个)。IBM的Java1.1.8 JRE就有这样的限制。它是Error，不是Exception，如果想捕获它，可以这样做：</p>
<div class="highlight"><pre><code class="java"><span class="lineno"> 1</span> <span class="kd">public</span> <span class="kd">class</span> <span class="nc">InternTest</span>
<span class="lineno"> 2</span> <span class="o">{</span>
<span class="lineno"> 3</span>         <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">intn</span><span class="o">=</span><span class="mi">80000</span><span class="o">;</span>
<span class="lineno"> 4</span>         <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span> <span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span>
<span class="lineno"> 5</span>         <span class="o">{</span>
<span class="lineno"> 6</span>                 <span class="n">String</span><span class="o">[]</span> <span class="n">hold</span> <span class="o">=</span> <span class="k">new</span> <span class="n">String</span><span class="o">[</span><span class="n">n</span><span class="o">];</span>
<span class="lineno"> 7</span>                 <span class="c1">// build list of interned strings</span>
<span class="lineno"> 8</span>                 <span class="k">for</span><span class="o">(</span> <span class="n">inti</span><span class="o">=</span><span class="mi">0</span><span class="o">;</span><span class="n">i</span><span class="o">&lt;</span><span class="n">n</span><span class="o">;</span><span class="n">i</span><span class="o">++)</span>
<span class="lineno"> 9</span>                 <span class="o">{</span>
<span class="lineno">10</span>                         <span class="k">try</span>
<span class="lineno">11</span>                         <span class="o">{</span>
<span class="lineno">12</span>                             <span class="n">hold</span><span class="o">[</span><span class="n">i</span><span class="o">]</span> <span class="o">=</span><span class="n">Integer</span><span class="o">.</span><span class="na">toString</span><span class="o">(</span><span class="n">i</span><span class="o">).</span><span class="na">intern</span><span class="o">();</span>
<span class="lineno">13</span>                         <span class="o">}</span>
<span class="lineno">14</span>                         <span class="k">catch</span><span class="o">(</span> <span class="n">Throwablee</span><span class="o">)</span>
<span class="lineno">15</span>                         <span class="o">{</span>
<span class="lineno">16</span>                             <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span> <span class="s">"intern exploded at "</span> <span class="o">+</span><span class="n">i</span><span class="o">);</span>
<span class="lineno">17</span>                             <span class="n">System</span><span class="o">.</span><span class="na">exit</span><span class="o">(</span> <span class="mi">1</span><span class="o">);</span>
<span class="lineno">18</span>                         <span class="o">}</span>
<span class="lineno">19</span>                  <span class="o">}</span>
<span class="lineno">20</span>                 <span class="c1">// make sure they were really interned.</span>
<span class="lineno">21</span>                 <span class="k">for</span><span class="o">(</span> <span class="n">inti</span><span class="o">=</span><span class="mi">0</span><span class="o">;</span><span class="n">i</span><span class="o">&lt;</span><span class="n">n</span><span class="o">;</span><span class="n">i</span><span class="o">++)</span>
<span class="lineno">22</span>                 <span class="o">{</span>
<span class="lineno">23</span>                 <span class="k">if</span><span class="o">(</span> <span class="n">hold</span><span class="o">[</span><span class="n">i</span><span class="o">]</span> <span class="o">!=</span><span class="n">Integer</span><span class="o">.</span><span class="na">toString</span><span class="o">(</span><span class="n">i</span><span class="o">).</span><span class="na">intern</span><span class="o">()</span> <span class="o">)</span>
<span class="lineno">24</span>                 <span class="o">{</span>
<span class="lineno">25</span>                     <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span> <span class="s">"intern failed at "</span> <span class="o">+</span><span class="n">i</span><span class="o">);</span>
<span class="lineno">26</span>                     <span class="n">System</span><span class="o">.</span><span class="na">exit</span><span class="o">(</span> <span class="mi">1</span><span class="o">);</span>
<span class="lineno">27</span>                 <span class="o">}</span>
<span class="lineno">28</span>         <span class="o">}</span>
<span class="lineno">29</span>               <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span> <span class="s">"intern good for at least "</span> <span class="o">+</span><span class="n">n</span><span class="o">+</span><span class="s">" Strings."</span> <span class="o">);</span>
<span class="lineno">30</span> <span class="o">}</span>
</code></pre></div>
<p>依旧要注意规范化会&#8221;不利&#8221;垃圾回收。</p>
<h3 id="id12">底层</h3>
<p>这里只讲底层规范化如何起作用的最简单形式。JVM内部在堆中存储对象，包括规范化与普通的String对象(这个说法貌似不是很严谨)。而且规范化的String被放在一个&#8221;弱&#8221;HashMap中。</p>
<p>HashMap中的String集合，也叫字符串常量池。他们和堆中其他普通对象没什么两样，只是因为经过优化后，生存期要长一些。String对象在堆中，而指向它的引用存在HashMap中，所以规范化字符串有自己的共享池。</p>
<p>当字符串被规范化时，先在HashMap中检查是否已存在，如果存在则返回指向主字符串的引用，通常这个引用优先自身的引用，而自身的副本就很快被垃圾回收器回收。如果没有，则将其引用添加到HashMap中，并注册为主字符串。规范化的过程不会再生成字符串的副本，只是持有主字符串的唯一引用。</p>
<p>规范化与非规范化的字符串都存储在堆中。由于规范化时产生的是弱引用，所以当除了HashMap中的弱引用再无其他引用指向主字符串时，该主字符串就可以被回收了。</p>
<p>new String时，不会自动规范化，因此在堆中会有同一个字符串的多个副本。随后调用该字符串的intern方法，这些副本也不会被清除。</p>
<p>我总感觉这里貌似有问题，干脆不翻译了，把原文贴上吧。</p>
<blockquote>This is a simplified version of how interning works under the hood. Inside the JVM is the heap where all allocated Objects reside. This includes Strings both interned and ordinary. (In Sun&#8217;s JVM, the interned Strings (which includes String literals) are stored in a special pool of RAM called the perm gen, where the JVM also loads classes and stores natively compiled code. However, the intered Strings behave no differently than had they been stored in the ordinary object heap.) In addition, interned Strings are registered in a weak HashMap.The collection of Strings registered in this HashMap is sometimes called the String pool. However, they are ordinary Objects and live on the heap just like any other (perhaps in an optimised way since interned Strings tend to be long lived). The String Object lives on the heap and a reference to it lives in the HashMap. There is so separate pool of interned String objects. Whenever a String is interned, it is looked up in the HashMap to see if it exists already. If so the user gets passed a reference to the master copy. Normally he will use that copy in preference to his. His duplicate copy then will likely soon have no references to it and will be eventually garbage collected. If the String has never been seen before, a reference to it will be added to the HashMap and intern will hand him a reference to his own String, now registered as the unique master. Note that the intern process does not make a copy of the String, it just keeps a reference to the unique master copies. All the Strings, interned and ordinary live on the heap. When there are no references left to a String except the intern HashMap registry reference, it will be garbage collected since intern keeps only a weak reference to it. When you say new String, it is not automatically interned. Thus there may then be duplicates on the heap. If you later use intern on that String, those duplicates won&#8217;t be cleaned up. Only when you intern all copies of a String, and discard references to the uninterned versions do you maintain but a single copy. </blockquote>
<h3 id="id13">手动规范化</h3>
<p>规范化最大的问题就是知道程序结束才能销毁占用RAM的空间，尽管再没有引用指向主字符串，也不能被垃圾回收器回收(早期版本)。如果想使用一个临时的规范化字符串，可以使用手动规范化。</p>
<p>然而，现在主流的JVM中的规范化字符串共享池都是采用弱引用实现的，所以只要没有强引用指向主字符串，则可被垃圾回收器回收。你可以像JVM一样，自己实现规范化的过程。</p>
<p>比如假设从文件中读取以逗号分隔的人名与地址，并以某种顺序存入集合，由于很多人居住在同一城市，所以RAM中就会充满了同一个城市的副本。</p>
<p>那么创建一个HashMap(不是HashSet),用于存储每个城市名称的主字符串。每次获取城市时，先从HashMap中查找，如果存在则用主字符串的引用替换自身的引用。自身String对象的副本很快就会被垃圾回收器回收。如果不存在增加城市到HashMap。</p>
<p>当读完城市后，就可以讲HashMap抛弃，而放入到HashMap中的主字符串，除了没有其他引用指向的主字符串被垃圾回收器回收掉之外，还是一样存在，一样拥有唯一的引用，而且与规范化后的字符串一样。</p>
<p>原文地址：<a href="http://mindprod.com/jgloss/interned.html">http://mindprod.com/jgloss/interned.html</a></p><br />
<hr />

<p>这里就算翻译完了，不过有些地方觉得怪怪的。还有由于个人水平实在是有限，难免有地方粗糙。另外，如果你说研究这个实在是没有意思类似的话，那拜托你憋在心里吧，谢谢了。</p>
<p>因为在看jdk源码，看到String中最后一行的intern是个native方法，于是就到处查资料，还在OSChina上提出一个问题：<a href="http://www.oschina.net/question/129471_38493">http://www.oschina.net/question/129471_38493</a>，讨论中就提到了撒加在javaeye上的一个帖子的回答：<a href="http://www.iteye.com/topic/1112592">http://www.iteye.com/topic/1112592</a>，于是我做了如下的测试，又画了3张图。</p>
<p>测试环境： 
<blockquote>java version "1.6.0_17" Java(TM) SE Runtime Environment (build 1.6.0_17-b04) Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode, sharing) </blockquote>
<p>&nbsp;</p>
<div class="highlight"><pre><code class="java"><span class="lineno">1</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
<span class="lineno">2</span>         <span class="n">String</span> <span class="n">str0</span> <span class="o">=</span> <span class="s">"congmo.github.com"</span><span class="o">;</span>
<span class="lineno">3</span>         <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">str0</span><span class="o">.</span><span class="na">intern</span><span class="o">()</span> <span class="o">==</span> <span class="n">str0</span><span class="o">);</span>
<span class="lineno">4</span> <span class="o">}</span>
</code></pre></div>
<blockquote>输出结果：true </blockquote>
<div class="highlight"><pre><code class="java"><span class="lineno">1</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
<span class="lineno">2</span>         <span class="n">String</span> <span class="n">str0</span> <span class="o">=</span> <span class="n">args</span><span class="o">[</span><span class="mi">0</span><span class="o">];</span>
<span class="lineno">3</span>         <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">str0</span><span class="o">.</span><span class="na">intern</span><span class="o">()</span> <span class="o">==</span> <span class="n">str0</span><span class="o">);</span>
<span class="lineno">4</span> <span class="o">}</span>
</code></pre></div>
<blockquote>同样在命令行输入:congmo.github.com<br />输出结果：<br />false </blockquote>
<div class="highlight"><pre><code class="java"><span class="lineno"> 1</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
<span class="lineno"> 2</span> 
<span class="lineno"> 3</span>         <span class="n">String</span> <span class="n">str0</span> <span class="o">=</span> <span class="s">"congmo.github.com"</span><span class="o">;</span>
<span class="lineno"> 4</span>         <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">str0</span><span class="o">.</span><span class="na">intern</span><span class="o">()</span> <span class="o">==</span> <span class="n">str0</span><span class="o">);</span>
<span class="lineno"> 5</span>                 
<span class="lineno"> 6</span>         <span class="n">String</span> <span class="n">str1</span> <span class="o">=</span> <span class="k">new</span> <span class="n">String</span><span class="o">(</span> <span class="n">args</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span> <span class="o">);</span>
<span class="lineno"> 7</span>         <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">str1</span><span class="o">.</span><span class="na">intern</span><span class="o">()</span> <span class="o">==</span> <span class="n">str1</span><span class="o">);</span>
<span class="lineno"> 8</span> 
<span class="lineno"> 9</span>         <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">str0</span> <span class="o">==</span> <span class="n">str1</span><span class="o">.</span><span class="na">intern</span><span class="o">());</span>
<span class="lineno">10</span> <span class="o">}</span>
</code></pre></div>
<blockquote>输出结果：<br />true<br />false<br />true<br /></blockquote>
<p>从前面两段代码中可以看出，使用命令行的方式同样输入参数&#8221;congmo.github.com&#8221;，将args<span>0</span>赋值给str0，然后str0.intern()==str0的结果竟然是false，难道真如javaeye那篇帖子中有人怀疑的那样，JVM将args<span>0</span>提前就规范化了？按道理应该不会啊。</p>
<p>测试环境： 
<blockquote>java version "1.7.0_02" Java(TM) SE Runtime Environment (build 1.7.0_02-b13) Java HotSpot(TM) Client VM (build 22.0-b10, mixed mode, sharing) </blockquote>
<p>&nbsp;</p>
<div class="highlight"><pre><code class="java"><span class="lineno">1</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
<span class="lineno">2</span>         <span class="n">String</span> <span class="n">str0</span> <span class="o">=</span> <span class="n">args</span><span class="o">[</span><span class="mi">0</span><span class="o">];</span>
<span class="lineno">3</span>         <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">str0</span><span class="o">.</span><span class="na">intern</span><span class="o">()</span> <span class="o">==</span> <span class="n">str0</span><span class="o">);</span>
<span class="lineno">4</span> <span class="o">}</span>
</code></pre></div>
<blockquote>输出结果： true </blockquote>
<div class="highlight"><pre><code class="java"><span class="lineno">1</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
<span class="lineno">2</span>         <span class="n">String</span> <span class="n">str0</span> <span class="o">=</span> <span class="k">new</span> <span class="n">String</span><span class="o">(</span> <span class="n">args</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span> <span class="o">);</span>
<span class="lineno">3</span>         <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">str0</span><span class="o">.</span><span class="na">intern</span><span class="o">()</span> <span class="o">==</span> <span class="n">str0</span><span class="o">);</span>
<span class="lineno">4</span> <span class="o">}</span>
</code></pre></div>
<blockquote>输出结果： true </blockquote>
<div class="highlight"><pre><code class="java"><span class="lineno">1</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
<span class="lineno">2</span>         <span class="n">String</span> <span class="n">str0</span> <span class="o">=</span> <span class="n">args</span><span class="o">[</span><span class="mi">0</span><span class="o">];</span>
<span class="lineno">3</span>         <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">str0</span><span class="o">.</span><span class="na">intern</span><span class="o">()</span> <span class="o">==</span> <span class="n">str0</span><span class="o">);</span>
<span class="lineno">4</span>         <span class="n">String</span> <span class="n">str</span> <span class="o">=</span> <span class="k">new</span> <span class="n">String</span><span class="o">(</span> <span class="n">args</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span> <span class="o">);</span>  
<span class="lineno">5</span>         <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">str</span><span class="o">.</span><span class="na">intern</span><span class="o">()</span> <span class="o">==</span> <span class="n">str</span><span class="o">);</span>
<span class="lineno">6</span>         <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">str</span><span class="o">.</span><span class="na">intern</span><span class="o">()</span> <span class="o">==</span> <span class="n">str0</span><span class="o">);</span>
<span class="lineno">7</span> <span class="o">}</span>
</code></pre></div>
<blockquote>输出结果：<br />true<br />false<br />true<br /></blockquote>
<p>但是从1.7版本执行的结果看来，貌似可以确定JVM没有对args<span>0</span>规范化，但是从javaeye帖子讨论中可以知晓1.7版本后perm gen这个内存区被干掉了，所以规范化之后的字符串也存储在堆中，所以无论args<span>0</span>有没有提前被规范化，str0始终都会指向堆中那个引用。按照我的理解，如下图所示：</p>
<div class="center"><img alt="" src="http://congmo.github.com/post_images/2012/02/intern1.png" width="600" height="400" /> </div>
<p>所以现在看来还是个未知数。</p>
<p>另外，我按照自己的理解针对3中情况画了3张图，都是用于说明JVM的内存分配的。 注：jdk1.6或之前版本，1.7之后方法区被砍掉。</p>
<div class="center"><img alt="" src="http://congmo.github.com/post_images/2012/02/intern2.png" width="600" height="400" /> </div>
<div class="center"><img alt="" src="http://congmo.github.com/post_images/2012/02/intern3.png" width="600" height="400" /> </div>
<p>这两张图都是描述使用new创建String，然后再调用自身的intern方法后内存以及引用的变化。</p></span></li></div> <img src ="http://www.blogjava.net/xiaofei-suman/aggbug/370843.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaofei-suman/" target="_blank">齐纳尔多</a> 2012-02-27 14:53 <a href="http://www.blogjava.net/xiaofei-suman/articles/370843.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转帖-String详解一:基础</title><link>http://www.blogjava.net/xiaofei-suman/articles/370842.html</link><dc:creator>齐纳尔多</dc:creator><author>齐纳尔多</author><pubDate>Mon, 27 Feb 2012 06:49:00 GMT</pubDate><guid>http://www.blogjava.net/xiaofei-suman/articles/370842.html</guid><wfw:comment>http://www.blogjava.net/xiaofei-suman/comments/370842.html</wfw:comment><comments>http://www.blogjava.net/xiaofei-suman/articles/370842.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaofei-suman/comments/commentRss/370842.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaofei-suman/services/trackbacks/370842.html</trackback:ping><description><![CDATA[转帖地址：<a href="http://congmo.github.com/blog/2012/02/16/1-translationofstring/">http://congmo.github.com/blog/2012/02/16/1-translationofstring/</a>(葱末)<br />
<div id="post_content" class="body">
<p>译者注：翻译这篇文章是有目的性的，不是闲来无事打发时间。刚刚看完String的源码，虽然看完，但是有很多东西(或者说&#8221;陷阱&#8221;)在源码中得不到体现。可能是在编译器中进行了优化。无意中发现了这篇文章，里面讲述了一些隐含的，源码中比较隐晦或者看不到的东西。比如substring,intern等。所以才有了翻译的&#8221;动机&#8221;，还有一篇专门讲述intern的，将在之二中翻译。另，翻译纯属个人行为，因技术与英语水准有限，文中肯定不乏欠妥之处，如果你能文明的指出，在下将感激不尽。如言辞中满是不尊重，则请收回。希望能带给其大家帮助，以达共同进步之目的。</p>
<p>Java中的字符串不同于与C++中的字符串，不能改动字符串中的字符。预查找字符串中某个字符，可是使用charAt()方法。Java中的字符串都是16位的Unicode。可是使用StringBuffer或者char<span>修改字符串。从1.5版本之后，可以使用StringBuilder替代StringBuffer，StringBuilder速度更快，但是是线程不安全的。</p>
<p>String.length()用来获取字符串的长度，而不是像其他类中使用的length或size()。</p>
<h3 id="id1">空字符串</h3>
<p>Java中有3种空字符串：null,&#8221;&#8220;和&#8221; &#8220;。下面就是如何区别这3中空字符串的方法。</p>
<div class="highlight"><pre><code class="java"><span class="lineno">1</span> <span class="k">if</span><span class="o">(</span> <span class="n">s</span><span class="o">==</span><span class="kc">null</span><span class="o">)</span> <span class="n">echo</span><span class="o">(</span> <span class="s">"was null"</span> <span class="o">);</span>
<span class="lineno">2</span> <span class="k">else</span> <span class="nf">if</span><span class="o">(</span> <span class="n">s</span><span class="o">.</span><span class="na">length</span><span class="o">()</span> <span class="o">==</span><span class="mi">0</span><span class="o">)</span> <span class="n">echo</span><span class="o">(</span> <span class="s">"was empty"</span> <span class="o">);</span>
<span class="lineno">3</span> <span class="k">else</span> <span class="nf">if</span><span class="o">(</span> <span class="n">s</span><span class="o">.</span><span class="na">trim</span><span class="o">().</span><span class="na">length</span><span class="o">()</span> <span class="o">==</span><span class="mi">0</span><span class="o">)</span> <span class="n">echo</span><span class="o">(</span> <span class="s">"was blank or other whitespace"</span> <span class="o">);</span>
</code></pre></div>
<h3 id="id2">字符串比较</h3>
<div class="highlight"><pre><code class="java"><span class="lineno">1</span> <span class="k">if</span><span class="o">(</span> <span class="s">"abc"</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="n">s</span><span class="o">)</span> <span class="o">)</span> <span class="n">echo</span><span class="o">(</span> <span class="s">"matched"</span> <span class="o">);</span>
</code></pre></div>
<p>与</p>
<div class="highlight"><pre><code class="java"><span class="lineno">1</span> <span class="k">if</span><span class="o">(</span> <span class="n">s</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span> <span class="s">"abc"</span> <span class="o">)</span> <span class="o">)</span> <span class="n">echo</span><span class="o">(</span> <span class="s">"matched"</span> <span class="o">);</span>
</code></pre></div>
<p>当s为null时，不会抛出异常，只会当作它们不相等。 除非使用String.intern()对字符串进行合并(interned)，否则不可以使用==来判断两个字符串是否相等。要使用equals()方法来比较。</p>
<p>如果一不小心误用==来比较字符串，编译器也不会发出警告。不幸的是，这个bug直到编译器或者虚拟机显式进行规范化(interning)时，才会凸显出。规范化(interning)之后，会获得一个字符串的原始引用。这样其他字符串的副本就可以很快被垃圾回收器回收。然而，规范化(interning)有3点不足：</p><li>要花费额外的时间在一个HashTable中查找原始字符串。</li><li>在某些JVM的实现中，有规范化字符串最大长度为64K的限制。</li><li>在某些JVM的实现中，规范化后的字符串，就算不在被引用，也永远不会被垃圾回收器回收。</li>
<p>如果想比较两个字符串的大小，就不能使用常规的比较操作了，可以使用compareTo()或compareToIgnoreCase()方法替代。</p>
<div class="highlight"><pre><code class="java"><span class="lineno">1</span> <span class="n">String</span> <span class="n">s</span> <span class="o">=</span><span class="s">"apple"</span><span class="o">;</span>
<span class="lineno">2</span> <span class="n">String</span> <span class="n">t</span> <span class="o">=</span><span class="s">"orange"</span><span class="o">;</span>
<span class="lineno">3</span> <span class="k">if</span><span class="o">(</span> <span class="n">s</span><span class="o">.</span><span class="na">compareTo</span><span class="o">(</span><span class="n">t</span><span class="o">)</span> <span class="o">&lt;</span><span class="mi">0</span><span class="o">)</span>
<span class="lineno">4</span> <span class="o">{</span>
<span class="lineno">5</span>    <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span> <span class="s">"s &lt; t"</span> <span class="o">);</span>
<span class="lineno">6</span> <span class="o">}</span>
</code></pre></div>
<p>compareTo的返回值：</p></li><li>如果s在字符表中排在t之后，返回正数。</li><li>如果s与t位置一样，返回0.</li><li>如果s在字符表中排在t之前，返回负数。</li>
<p>这个时候可以粗略的把字符串当作数字。返回值就是s-t。</p>
<p>新手可能会因为下面的几个结果感到惊奇：</p></li><li>"abc".compareTo( "ABC") returns "abc" &gt; "ABC" compareTo是大小写敏感的。</li><li>"abc ".compareTo ( "abc") returns "abc " &gt; "abc" 空格与其他字符一样。</li><li>"".compareTo( null) 会抛出：java.lang.NullPointerException 异常。</li><li>""与null不同。多数String中的方法可以很好的处理""，但是很少能接受null的。</li><li>字符串的比较是通过Unicode数字字符的比较来实现的。不能根据本地语言进行调整。</li>
<p>当实现自己的类时，默认的Object.equals不会一个个字段进行比较。需要自行实现equals来比较。默认equals只是比较两个引用是否指向同一个对象。</p>
<h4 id="id3">大小写敏感与大小写不敏感比较</h4>
<div class="highlight"><pre><code class="java"><span class="lineno"> 1</span> <span class="c1">// String comparison, case-sensitive and insensitive.</span>
<span class="lineno"> 2</span> <span class="n">Stringapple</span><span class="o">=</span><span class="s">"apple"</span><span class="o">;</span>
<span class="lineno"> 3</span> <span class="n">Stringorange</span><span class="o">=</span><span class="s">"orange"</span><span class="o">;</span>
<span class="lineno"> 4</span> 
<span class="lineno"> 5</span> <span class="c1">// case-sensitive compare for equality, faster than order comparison.</span>
<span class="lineno"> 6</span> <span class="n">booleansame</span><span class="o">=</span><span class="n">apple</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span> <span class="n">orange</span><span class="o">);</span>
<span class="lineno"> 7</span> 
<span class="lineno"> 8</span> <span class="c1">// case-insensitive compare for equality, slower that case-sensitive comparison.</span>
<span class="lineno"> 9</span> <span class="n">booleansame</span><span class="o">=</span><span class="n">apple</span><span class="o">.</span><span class="na">equalsIgnoreCase</span><span class="o">(</span> <span class="n">orange</span><span class="o">);</span>
<span class="lineno">10</span> 
<span class="lineno">11</span> <span class="c1">// case-sensitive compare for order.</span>
<span class="lineno">12</span> <span class="c1">// +ve if apple&gt;orange, 0 if apple==orange, -ve if apple&amp;lt;orange</span>
<span class="lineno">13</span> <span class="n">intorder</span><span class="o">=</span><span class="n">apple</span><span class="o">.</span><span class="na">compareTo</span><span class="o">(</span> <span class="n">orange</span><span class="o">);</span>
<span class="lineno">14</span> 
<span class="lineno">15</span> <span class="c1">// case-insensitive compare for order.</span>
<span class="lineno">16</span> <span class="c1">// +ve if apple&amp;gt;orange, 0 if apple==orange, -ve if apple&amp;lt;orange</span>
<span class="lineno">17</span> <span class="n">intorder</span><span class="o">=</span><span class="n">apple</span><span class="o">.</span><span class="na">compareToIgnoreCase</span><span class="o">(</span> <span class="n">orange</span><span class="o">);</span>
<span class="lineno">18</span> 
<span class="lineno">19</span> <span class="c1">// If you are going compare the same strings over and over,</span>
<span class="lineno">20</span> <span class="c1">// and you want to compare them in a case-insensitive way, it may pay</span>
<span class="lineno">21</span> <span class="c1">// to convert them to lower case, and use the faster case-sensive compare.</span>
<span class="lineno">22</span> <span class="n">StringlcApple</span><span class="o">=</span><span class="n">apple</span><span class="o">.</span><span class="na">toLowerCase</span><span class="o">();</span>
<span class="lineno">23</span> <span class="n">StringlcOrange</span><span class="o">=</span><span class="n">orange</span><span class="o">.</span><span class="na">toLowerCase</span><span class="o">();</span>
<span class="lineno">24</span> 
<span class="lineno">25</span> <span class="c1">// effectively a case-insensitive compare for equality,</span>
<span class="lineno">26</span> <span class="n">booleansame</span><span class="o">=</span><span class="n">lcApple</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span> <span class="n">lcOrange</span><span class="o">);</span>
<span class="lineno">27</span> 
<span class="lineno">28</span> <span class="c1">// effectively a case-insensitive compare for order.</span>
<span class="lineno">29</span> <span class="c1">// +ve if apple&gt;orange, 0 if apple==orange, -ve if apple&amp;lt;orange</span>
<span class="lineno">30</span> <span class="n">intorder</span><span class="o">=</span><span class="n">lcApple</span><span class="o">.</span><span class="na">compareTo</span><span class="o">(</span> <span class="n">lcOrange</span><span class="o">);</span>
</code></pre></div>
<h3 id="id4">字符串搜索</h3>
<p>字符串搜索可使用indexOf和lastIndexOf。他们都可以通过fromOffset改变搜索开始的位置。返回的结果是相对于字符串开始的位置(0)，而不是相对于fromOffset的位置。如果搜索时忽略大小写，可先将字符串全部转换成大写或小写。可以这样实现：</p>
<div class="highlight"><pre><code class="java"><span class="lineno"> 1</span>     <span class="kd">public</span> <span class="kd">static</span> <span class="nf">voidmain</span><span class="o">(</span> <span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span>
<span class="lineno"> 2</span>         <span class="o">{</span>
<span class="lineno"> 3</span>         <span class="c1">// use of indexOf</span>
<span class="lineno"> 4</span>         <span class="n">finalStrings1</span><span class="o">=</span><span class="s">"ABCDEFGABCDEFG"</span><span class="o">;</span>
<span class="lineno"> 5</span>         <span class="n">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span> <span class="n">s1</span><span class="o">.</span><span class="na">indexOf</span><span class="o">(</span> <span class="s">"CD"</span> <span class="o">)</span> <span class="o">);</span>
<span class="lineno"> 6</span>         <span class="c1">// prints 2, 0-based offset of first CD where found.</span>
<span class="lineno"> 7</span> 
<span class="lineno"> 8</span>         <span class="n">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span> <span class="n">s1</span><span class="o">.</span><span class="na">indexOf</span><span class="o">(</span> <span class="s">"cd"</span> <span class="o">)</span> <span class="o">);</span>
<span class="lineno"> 9</span>         <span class="c1">// prints -1, means not found, search is case sensitive</span>
<span class="lineno">10</span> 
<span class="lineno">11</span>         <span class="n">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span> <span class="n">s1</span><span class="o">.</span><span class="na">toLowerCase</span><span class="o">().</span><span class="na">indexOf</span><span class="o">(</span> <span class="s">"cd"</span> <span class="o">)</span> <span class="o">);</span>
<span class="lineno">12</span>         <span class="c1">// prints 2,  0-based offset of first cd where found</span>
<span class="lineno">13</span> 
<span class="lineno">14</span>         <span class="n">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span> <span class="n">s1</span><span class="o">.</span><span class="na">indexOf</span><span class="o">(</span> <span class="s">"cd"</span><span class="o">.</span><span class="na">toUpperCase</span><span class="o">()</span> <span class="o">)</span> <span class="o">);</span>
<span class="lineno">15</span>         <span class="c1">// prints 2,  0-based offset of first cd where found</span>
<span class="lineno">16</span> 
<span class="lineno">17</span>         <span class="n">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span> <span class="n">s1</span><span class="o">.</span><span class="na">indexOf</span><span class="o">(</span> <span class="s">"CD"</span><span class="o">,</span><span class="mi">4</span><span class="cm">/* start looking here, after the first CD */</span><span class="o">)</span> <span class="o">);</span>
<span class="lineno">18</span>         <span class="c1">// prints 9, 0-based offset relative to the original string,</span>
<span class="lineno">19</span>         <span class="c1">// not relative to the start of the substring</span>
<span class="lineno">20</span> 
<span class="lineno">21</span>         <span class="c1">// use of last indexOf</span>
<span class="lineno">22</span> 
<span class="lineno">23</span>         <span class="n">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span> <span class="n">s1</span><span class="o">.</span><span class="na">lastIndexOf</span><span class="o">(</span> <span class="s">"CD"</span> <span class="o">)</span> <span class="o">);</span>
<span class="lineno">24</span>         <span class="c1">// prints 9, 0-based offset of where last CD found.</span>
<span class="lineno">25</span> 
<span class="lineno">26</span>         <span class="n">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span> <span class="n">s1</span><span class="o">.</span><span class="na">lastIndexOf</span><span class="o">(</span> <span class="s">"cd"</span> <span class="o">)</span> <span class="o">);</span>
<span class="lineno">27</span>         <span class="c1">// prints -1, means not found, search is case sensitive</span>
<span class="lineno">28</span> 
<span class="lineno">29</span>         <span class="n">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span> <span class="n">s1</span><span class="o">.</span><span class="na">toLowerCase</span><span class="o">().</span><span class="na">lastIndexOf</span><span class="o">(</span> <span class="s">"cd"</span> <span class="o">)</span> <span class="o">);</span>
<span class="lineno">30</span>         <span class="c1">// prints 9,  0-based offset of where last cd found</span>
<span class="lineno">31</span> 
<span class="lineno">32</span>         <span class="n">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span> <span class="n">s1</span><span class="o">.</span><span class="na">lastIndexOf</span><span class="o">(</span> <span class="s">"cd"</span><span class="o">.</span><span class="na">toUpperCase</span><span class="o">()</span> <span class="o">)</span> <span class="o">);</span>
<span class="lineno">33</span>         <span class="c1">// prints 9,  0-based offset of where last cd found</span>
<span class="lineno">34</span> 
<span class="lineno">35</span>         <span class="n">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span> <span class="n">s1</span><span class="o">.</span><span class="na">lastIndexOf</span><span class="o">(</span> <span class="s">"CD"</span><span class="o">,</span><span class="mi">8</span><span class="cm">/* start looking here, prior to last */</span><span class="o">)</span> <span class="o">);</span>
<span class="lineno">36</span>         <span class="c1">// prints 2, 0-based offset relative to the original string,</span>
<span class="lineno">37</span>         <span class="c1">// not relative to the start of the substring</span>
<span class="lineno">38</span> 
<span class="lineno">39</span>         <span class="n">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span> <span class="s">"\u00df"</span> <span class="o">);</span>
<span class="lineno">40</span>         <span class="c1">// prints German esset ligature sz single ss bate-like glyph</span>
<span class="lineno">41</span> 
<span class="lineno">42</span>         <span class="n">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span> <span class="s">"\u00df"</span><span class="o">.</span><span class="na">toUpperCase</span><span class="o">()</span> <span class="o">);</span>
<span class="lineno">43</span>         <span class="c1">// prints SS, not SZ, two chars long!</span>
<span class="lineno">44</span>         <span class="o">}</span>
<span class="lineno">45</span>     <span class="o">}</span>
</code></pre></div>
<p>查找单个字符有很多方法，其中不乏速度比一个一个字符比较是否相等快。理想情况下，编译器足够智能的将indexOf方法单个字符参数转化为char，那么可以将x.indexOf(y) &gt;= 0 简化为x.contains(y)。</p>
<h3 id="id5">创建字符串</h3>
<p>字符串是不可变的，因此字符串不仅可以被无限期重用，而且还可在很多场景下共享。当你将一个字符串变量赋给另外一个字符串变量时，不会再次产生副本。甚至在调用substring后，赋给了新的变量，也不会创建新的字符串。只有在一下几种情况下才会创建新的字符串：</p></li><li>字符串拼接</li><li>从文件中读取字符串</li><li>愚蠢的使用new String(somethingElse)。一种情况下使用这种方式是恰当的，参见substring()</li><li>使用StringBuffer/StringBuilder的toString或substring方法</li>
<h3 id="tostring">toString方法</h3>
<p>每种对象都可以调用toString方法将自身的内容转化成人类可读的形式。通常，编写自定义类时，尽管仅仅是为了degub，也要单独实现toString方法。</p>
<p>这样来调用：String toShow = myThing.toString();</p>
<p>默认的Object.toString()很不智能，它不会像你期待的那样，将类中所有字段值输出。要达到这种预期，就要自己编码实现。默认的toString方法会比较对象的hashCode或者对象的地址。</p>
<p>toString方法有个神奇的地方。在需要转换为字符串时，好像自动调用toString进行了转换。</p></li><li>一种情况是使用：System.out.println(and brothers)，其实它一点儿都不高深，println只是使用众多的重载方法实现的。println有很多重载方法，每个基本数据类型一个。每个基本数据类型的toString方法将本身转化为字符串。但是我们知道基本数据类型中是没有toString方法的啊，确实是这样，但是别忘记，有些静态转换方法，比如String.valueOf(double)就可以将双精度浮点数转化为字符串。对于任何String之外的对象，println方法调用的是对象自身重写后的toString方法，再将结果传给参数只能为String的println方法。</li><li>当使用字符串连接符时(+)，toString确实被调用了。如果将两个对象相加，Java就假定你就是想将他们连接，于是调用各自的toString方法，将连接后的字符串返回。在字符串与基本数据类型相加的情况下，依然奏效。连接符会先把基本数据类型转换为字符串，然后将结果连接。</li>
<h3 id="id6">字符串替换</h3>
<p>String.replace( char target, char replacement )、String. replace( String target, String replacement ) 两个方法都是替换目标字符串中出现的所有指定的字符或字符串，但是前者要比后者快很多。所以在替换单个字符时，要使用前者，即使用单引号。不幸的是，后者只有在1.5及其之后的版本中才可以使用。</p>
<p>replaceAll( String regex, String replacement ) 方法也是全部替换，区别在于replaceAll方法使用正则表达式搜索。欲使用replace( String target, String replacement ) 时千万不能使用replaceAll(String regex, String replacement) 。第二个参数不是简单的字符串，String. replaceAll 与Matcher. replaceAll 一样。$代表匹配字符串的引用，\则是正则表达式中的关键字，所以需要将\转义为\\\\，将$转义为\\$。</p>
<p>replaceFirst( String regex, String replacement ) 也使用正则表达式。</p>
<p>Javadoc中String.replace是以 CharSequence为入参的，别担心，String实现了 CharSequence接口，所以replace可以在String或StringBuilder中正常使用。</p>
<h3 id="id7">正则表达式</h3>
<p>String中包含很多非常好用的正则表达式方法，比如split、matches、replaceAll还有replaceFirst。通常情况下推荐使用高效的java.util.regex中的方法，方法中的Pattern被提前编译，并且可重用。在不考虑效率的情况下，就可以使用String中的正则表达式方法了。</p>
<p>replaceAll和replace都以低效的方式实现，每次调用都要重新编译regex pattern。</p>
<div class="highlight"><pre><code class="java"><span class="lineno">1</span> <span class="c1">// how replace is implemented.</span>
<span class="lineno">2</span> <span class="c1">// It uses regex techniques even though neither parameter is a regex.</span>
<span class="lineno">3</span> <span class="n">publicStringreplace</span><span class="o">(</span><span class="n">CharSequencetarget</span><span class="o">,</span><span class="n">CharSequencereplacement</span><span class="o">)</span>
<span class="lineno">4</span> <span class="o">{</span>
<span class="lineno">5</span>    <span class="n">returnPattern</span><span class="o">.</span><span class="na">compile</span><span class="o">(</span> <span class="n">target</span><span class="o">.</span><span class="na">toString</span><span class="o">(),</span><span class="n">Pattern</span><span class="o">.</span><span class="na">LITERAL</span><span class="o">)</span>
<span class="lineno">6</span>    <span class="o">.</span><span class="na">matcher</span><span class="o">(</span> <span class="k">this</span><span class="o">).</span><span class="na">replaceAll</span><span class="o">(</span> <span class="n">Matcher</span><span class="o">.</span><span class="na">quoteReplacement</span><span class="o">(</span> <span class="n">replacement</span><span class="o">.</span><span class="na">toString</span><span class="o">()</span> <span class="o">)</span> <span class="o">);</span>
<span class="lineno">7</span> <span class="o">}</span>
</code></pre></div>
<p>所以，如果不止一次调用replace或replaceAll时，最好使用单独的正则表达式，编译一次即可重用。</p>
<h3 id="substring">substring</h3>
<p>substring很智能，与其他编程语言的深拷贝不同，它只是创建一个指向原始不可变字符串的引用。比如根据substring参数设置char<span>的偏移值，与count属性值后，返回一个指向它的引用，而不是全部拷贝。这样就给调试增添了困惑，因为每次看到的都是整个字符串而不是截取后的子串。这样做有一个致命的缺点，就是子串一直保持着整个原始字符串的引用，这样即使原始字符串已经没用了，也不能被垃圾回收器回收。(事实上String对象的引用可以被回收，但是RAM中的char<span>没法被回收)</p>
<p>所以查找字符串时，使用indexOf(lookFor, offset)要好于先使用substring创建子串再使用indexOf(lookFor)。</p>
<p>如果确切的知晓小子串会指向RAM中原始大字符串的char<span>，使其不能被回收，这个时候可以使用littleString = new String(littleString)来创建一个与原始字符串无关的新字符串来避免这种情况的发生。</p>
<p>如果你是通过src.zip来学习String.substring()，那么这种&#8221;陷阱&#8221;就很难被发现。因为它是用过String的一个非公有构造方法String (int offset, int count, char value<span>) 来调整value的偏移值和count值来实现。</p>
<p>原文链接：<a href="http://mindprod.com/jgloss/string.html"><font color="#002c99">http://mindprod.com/jgloss/string.html</font></a><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://mindprod.com/jgloss/substring.html"><font color="#002c99">http://mindprod.com/jgloss/substring.html</font></a></p></span></span></span></span></span></div><img src ="http://www.blogjava.net/xiaofei-suman/aggbug/370842.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaofei-suman/" target="_blank">齐纳尔多</a> 2012-02-27 14:49 <a href="http://www.blogjava.net/xiaofei-suman/articles/370842.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jvm查看工具</title><link>http://www.blogjava.net/xiaofei-suman/articles/370828.html</link><dc:creator>齐纳尔多</dc:creator><author>齐纳尔多</author><pubDate>Mon, 27 Feb 2012 03:48:00 GMT</pubDate><guid>http://www.blogjava.net/xiaofei-suman/articles/370828.html</guid><wfw:comment>http://www.blogjava.net/xiaofei-suman/comments/370828.html</wfw:comment><comments>http://www.blogjava.net/xiaofei-suman/articles/370828.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaofei-suman/comments/commentRss/370828.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaofei-suman/services/trackbacks/370828.html</trackback:ping><description><![CDATA[<div>1.jps 类似于ps 可以查看java的进程<br />2.jstat jvm垃圾收集内存使用情况<br /><img style="width: 660px; height: 157px" border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/xiaofei-suman/QQ截图20120227113328.png" width="660" height="157" /><br />S0:Survior1区内存占用<br />S1:Survior2区内存占用<br />E:Eden(新生代-Eden)<br />O:Old(老年代)<br />P:持久代<br />YGC:新生代gc次数(minor gc)<br />YGCT：gc时间<br />FGC：full&nbsp; gc 次数<br />FGCT:full&nbsp; gc时间<br />GCT:&nbsp;总gc时间&nbsp;<br />3.gc日志输出<br />&nbsp; -XX:+PrintGC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gc概要信息<br />&nbsp; -XX:+PrintGCDetails&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gc详细信息<br />&nbsp; -XX:+PrintGCTimeStamps&nbsp;&nbsp;&nbsp;&nbsp;GC停顿耗时<br />&nbsp; <span style="font-family: 'Times New Roman','serif'; font-size: 10.5pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">-XX:+PrintGCApplicationStopedTime&nbsp; 用户进程停顿时间(stop the world)<br /></span>&nbsp; 再加上-Xloggc:文件路径&nbsp;&nbsp; gc信息将会输出到指定的文件中<br />4.jconsole可以远程或者本地监控jvm内存信息，线程信息, 类加载信息,MBean<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/xiaofei-suman/jconsole.jpg" width="901" height="693" />信息<br /><br />&nbsp;5.jmap<br />&nbsp;6.jhat<br />&nbsp;7.jvisualVm<br />&nbsp;8.eclipse memory analysis<br /></div><img src ="http://www.blogjava.net/xiaofei-suman/aggbug/370828.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaofei-suman/" target="_blank">齐纳尔多</a> 2012-02-27 11:48 <a href="http://www.blogjava.net/xiaofei-suman/articles/370828.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>发扑克牌的简单(java)实现</title><link>http://www.blogjava.net/xiaofei-suman/articles/370480.html</link><dc:creator>齐纳尔多</dc:creator><author>齐纳尔多</author><pubDate>Wed, 22 Feb 2012 01:28:00 GMT</pubDate><guid>http://www.blogjava.net/xiaofei-suman/articles/370480.html</guid><wfw:comment>http://www.blogjava.net/xiaofei-suman/comments/370480.html</wfw:comment><comments>http://www.blogjava.net/xiaofei-suman/articles/370480.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaofei-suman/comments/commentRss/370480.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaofei-suman/services/trackbacks/370480.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;cn.com.pbqi.corejava;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.ArrayList;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Iterator;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.List;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Map;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Random;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.TreeMap;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img id="Codehighlighter1_205_2024_Open_Image" onclick="this.style.display='none'; Codehighlighter1_205_2024_Open_Text.style.display='none'; Codehighlighter1_205_2024_Closed_Image.style.display='inline'; Codehighlighter1_205_2024_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_205_2024_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_205_2024_Closed_Text.style.display='none'; Codehighlighter1_205_2024_Open_Image.style.display='inline'; Codehighlighter1_205_2024_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;CardGame&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_205_2024_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_205_2024_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;pNum;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">String</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;cardList&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList</span><span style="color: #000000">&lt;</span><span style="color: #000000">String</span><span style="color: #000000">&gt;</span><span style="color: #000000">(</span><span style="color: #000000">54</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Map</span><span style="color: #000000">&lt;</span><span style="color: #000000">String,List</span><span style="color: #000000">&lt;</span><span style="color: #000000">String</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">&nbsp;map&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TreeMap</span><span style="color: #000000">&lt;</span><span style="color: #000000">String,List</span><span style="color: #000000">&lt;</span><span style="color: #000000">String</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img id="Codehighlighter1_367_412_Open_Image" onclick="this.style.display='none'; Codehighlighter1_367_412_Open_Text.style.display='none'; Codehighlighter1_367_412_Closed_Image.style.display='inline'; Codehighlighter1_367_412_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_367_412_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_367_412_Closed_Text.style.display='none'; Codehighlighter1_367_412_Open_Image.style.display='inline'; Codehighlighter1_367_412_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_367_412_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_367_412_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;打牌的人数,最少2个人,最多4个人<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;pNum<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_441_740_Open_Image" onclick="this.style.display='none'; Codehighlighter1_441_740_Open_Text.style.display='none'; Codehighlighter1_441_740_Closed_Image.style.display='inline'; Codehighlighter1_441_740_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_441_740_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_441_740_Closed_Text.style.display='none'; Codehighlighter1_441_740_Open_Image.style.display='inline'; Codehighlighter1_441_740_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;CardGame(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;pNum)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_441_740_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_441_740_Open_Text"><span style="color: #000000">{<br /><img id="Codehighlighter1_470_568_Open_Image" onclick="this.style.display='none'; Codehighlighter1_470_568_Open_Text.style.display='none'; Codehighlighter1_470_568_Closed_Image.style.display='inline'; Codehighlighter1_470_568_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_470_568_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_470_568_Closed_Text.style.display='none'; Codehighlighter1_470_568_Open_Image.style.display='inline'; Codehighlighter1_470_568_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(pNum&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;pNum&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">4</span><span style="color: #000000">)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_470_568_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_470_568_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;IllegalArgumentException(</span><span style="color: #000000">"</span><span style="color: #000000">CardPlayer&nbsp;must&nbsp;between&nbsp;2&nbsp;and&nbsp;4,&nbsp;CardPlayer=</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;pNum);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.pNum&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;pNum;<br /><img id="Codehighlighter1_621_669_Open_Image" onclick="this.style.display='none'; Codehighlighter1_621_669_Open_Text.style.display='none'; Codehighlighter1_621_669_Closed_Image.style.display='inline'; Codehighlighter1_621_669_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_621_669_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_621_669_Closed_Text.style.display='none'; Codehighlighter1_621_669_Open_Image.style.display='inline'; Codehighlighter1_621_669_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">pNum;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_621_669_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_621_669_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.put(i</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">-</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList</span><span style="color: #000000">&lt;</span><span style="color: #000000">String</span><span style="color: #000000">&gt;</span><span style="color: #000000">());<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.initCards();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.distribute();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.display();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img id="Codehighlighter1_745_764_Open_Image" onclick="this.style.display='none'; Codehighlighter1_745_764_Open_Text.style.display='none'; Codehighlighter1_745_764_Closed_Image.style.display='inline'; Codehighlighter1_745_764_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_745_764_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_745_764_Closed_Text.style.display='none'; Codehighlighter1_745_764_Open_Image.style.display='inline'; Codehighlighter1_745_764_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_745_764_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_745_764_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;初始化一副扑克<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_800_1169_Open_Image" onclick="this.style.display='none'; Codehighlighter1_800_1169_Open_Text.style.display='none'; Codehighlighter1_800_1169_Closed_Image.style.display='inline'; Codehighlighter1_800_1169_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_800_1169_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_800_1169_Closed_Text.style.display='none'; Codehighlighter1_800_1169_Open_Image.style.display='inline'; Codehighlighter1_800_1169_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">String</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;initCards()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_800_1169_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_800_1169_Open_Text"><span style="color: #000000">{<br /><img id="Codehighlighter1_820_836_Open_Image" onclick="this.style.display='none'; Codehighlighter1_820_836_Open_Text.style.display='none'; Codehighlighter1_820_836_Closed_Image.style.display='inline'; Codehighlighter1_820_836_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_820_836_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_820_836_Closed_Text.style.display='none'; Codehighlighter1_820_836_Open_Image.style.display='inline'; Codehighlighter1_820_836_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;type&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_820_836_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_820_836_Open_Text"><span style="color: #000000">{</span><span style="color: #000000">"</span><span style="color: #000000">r</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">b</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">s</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">m</span><span style="color: #000000">"</span><span style="color: #000000">}</span></span><span style="color: #000000">;<br /><img id="Codehighlighter1_858_911_Open_Image" onclick="this.style.display='none'; Codehighlighter1_858_911_Open_Text.style.display='none'; Codehighlighter1_858_911_Closed_Image.style.display='inline'; Codehighlighter1_858_911_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_858_911_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_858_911_Closed_Text.style.display='none'; Codehighlighter1_858_911_Open_Image.style.display='inline'; Codehighlighter1_858_911_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;cards&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_858_911_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_858_911_Open_Text"><span style="color: #000000">{</span><span style="color: #000000">"</span><span style="color: #000000">A</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">2</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">3</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">4</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">5</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">6</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">7</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">8</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">9</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">10</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">J</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">Q</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">K</span><span style="color: #000000">"</span><span style="color: #000000">}</span></span><span style="color: #000000">;<br /><img id="Codehighlighter1_933_943_Open_Image" onclick="this.style.display='none'; Codehighlighter1_933_943_Open_Text.style.display='none'; Codehighlighter1_933_943_Closed_Image.style.display='inline'; Codehighlighter1_933_943_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_933_943_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_933_943_Closed_Text.style.display='none'; Codehighlighter1_933_943_Open_Image.style.display='inline'; Codehighlighter1_933_943_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;kings&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_933_943_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_933_943_Open_Text"><span style="color: #000000">{</span><span style="color: #000000">"</span><span style="color: #000000">大王</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">小王</span><span style="color: #000000">"</span><span style="color: #000000">}</span></span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img id="Codehighlighter1_988_1075_Open_Image" onclick="this.style.display='none'; Codehighlighter1_988_1075_Open_Text.style.display='none'; Codehighlighter1_988_1075_Closed_Image.style.display='inline'; Codehighlighter1_988_1075_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_988_1075_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_988_1075_Closed_Text.style.display='none'; Codehighlighter1_988_1075_Open_Image.style.display='inline'; Codehighlighter1_988_1075_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;type.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_988_1075_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_988_1075_Open_Text"><span style="color: #000000">{<br /><img id="Codehighlighter1_1030_1071_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1030_1071_Open_Text.style.display='none'; Codehighlighter1_1030_1071_Closed_Image.style.display='inline'; Codehighlighter1_1030_1071_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1030_1071_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1030_1071_Closed_Text.style.display='none'; Codehighlighter1_1030_1071_Open_Image.style.display='inline'; Codehighlighter1_1030_1071_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;j&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;cards.length;j</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1030_1071_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1030_1071_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cardList.add(cards[j]</span><span style="color: #000000">+</span><span style="color: #000000">type[i]);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_1116_1147_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1116_1147_Open_Text.style.display='none'; Codehighlighter1_1116_1147_Closed_Image.style.display='inline'; Codehighlighter1_1116_1147_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1116_1147_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1116_1147_Closed_Text.style.display='none'; Codehighlighter1_1116_1147_Open_Image.style.display='inline'; Codehighlighter1_1116_1147_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;k&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;k&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;kings.length;&nbsp;k</span><span style="color: #000000">++</span><span style="color: #000000">)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1116_1147_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1116_1147_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cardList.add(kings[k]);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;cardList;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_1172_1186_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1172_1186_Open_Text.style.display='none'; Codehighlighter1_1172_1186_Closed_Image.style.display='inline'; Codehighlighter1_1172_1186_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1172_1186_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1172_1186_Closed_Text.style.display='none'; Codehighlighter1_1172_1186_Open_Image.style.display='inline'; Codehighlighter1_1172_1186_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1172_1186_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_1172_1186_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;发牌<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_1214_1495_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1214_1495_Open_Text.style.display='none'; Codehighlighter1_1214_1495_Closed_Image.style.display='inline'; Codehighlighter1_1214_1495_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1214_1495_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1214_1495_Closed_Text.style.display='none'; Codehighlighter1_1214_1495_Open_Image.style.display='inline'; Codehighlighter1_1214_1495_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;distribute()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1214_1495_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1214_1495_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Random&nbsp;r&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Random();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;len&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cardList.size();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;bakLen&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;len;<br /><img id="Codehighlighter1_1323_1492_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1323_1492_Open_Text.style.display='none'; Codehighlighter1_1323_1492_Closed_Image.style.display='inline'; Codehighlighter1_1323_1492_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1323_1492_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1323_1492_Closed_Text.style.display='none'; Codehighlighter1_1323_1492_Open_Image.style.display='inline'; Codehighlighter1_1323_1492_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;len;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1323_1492_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1323_1492_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;rNum&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;r.nextInt(bakLen);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;card&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cardList.get(rNum);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;left&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">%</span><span style="color: #000000">&nbsp;pNum;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.get(left</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">-</span><span style="color: #000000">"</span><span style="color: #000000">).add(card);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cardList.remove(rNum);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bakLen</span><span style="color: #000000">--</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img id="Codehighlighter1_1522_1940_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1522_1940_Open_Text.style.display='none'; Codehighlighter1_1522_1940_Closed_Image.style.display='inline'; Codehighlighter1_1522_1940_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1522_1940_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1522_1940_Closed_Text.style.display='none'; Codehighlighter1_1522_1940_Open_Image.style.display='inline'; Codehighlighter1_1522_1940_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;display()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1522_1940_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1522_1940_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">======r:红桃,b:黑桃,s:方块,m:米花===========</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img id="Codehighlighter1_1658_1937_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1658_1937_Open_Text.style.display='none'; Codehighlighter1_1658_1937_Closed_Image.style.display='inline'; Codehighlighter1_1658_1937_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1658_1937_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1658_1937_Closed_Text.style.display='none'; Codehighlighter1_1658_1937_Open_Image.style.display='inline'; Codehighlighter1_1658_1937_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(Iterator</span><span style="color: #000000">&lt;</span><span style="color: #000000">String</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;iter&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;map.keySet().iterator();&nbsp;iter.hasNext();)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1658_1937_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1658_1937_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;key&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;iter.next();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">String</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;map.get(key);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(key</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;的牌是===</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img id="Codehighlighter1_1802_1906_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1802_1906_Open_Text.style.display='none'; Codehighlighter1_1802_1906_Closed_Image.style.display='inline'; Codehighlighter1_1802_1906_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1802_1906_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1802_1906_Closed_Text.style.display='none'; Codehighlighter1_1802_1906_Open_Image.style.display='inline'; Codehighlighter1_1802_1906_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;list.size();i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1802_1906_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1802_1906_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(list.get(i));<br /><img id="Codehighlighter1_1867_1901_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1867_1901_Open_Text.style.display='none'; Codehighlighter1_1867_1901_Closed_Image.style.display='inline'; Codehighlighter1_1867_1901_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1867_1901_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1867_1901_Closed_Text.style.display='none'; Codehighlighter1_1867_1901_Open_Image.style.display='inline'; Codehighlighter1_1867_1901_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(i&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;list.size()&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1867_1901_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1867_1901_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">""</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img id="Codehighlighter1_1984_2021_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1984_2021_Open_Text.style.display='none'; Codehighlighter1_1984_2021_Closed_Image.style.display='inline'; Codehighlighter1_1984_2021_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1984_2021_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1984_2021_Closed_Text.style.display='none'; Codehighlighter1_1984_2021_Open_Image.style.display='inline'; Codehighlighter1_1984_2021_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1984_2021_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1984_2021_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CardGame&nbsp;cg&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;CardGame(</span><span style="color: #000000">4</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></div> <img src ="http://www.blogjava.net/xiaofei-suman/aggbug/370480.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaofei-suman/" target="_blank">齐纳尔多</a> 2012-02-22 09:28 <a href="http://www.blogjava.net/xiaofei-suman/articles/370480.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>求一个字符串是否是回文数</title><link>http://www.blogjava.net/xiaofei-suman/articles/246550.html</link><dc:creator>齐纳尔多</dc:creator><author>齐纳尔多</author><pubDate>Tue, 16 Dec 2008 01:40:00 GMT</pubDate><guid>http://www.blogjava.net/xiaofei-suman/articles/246550.html</guid><wfw:comment>http://www.blogjava.net/xiaofei-suman/comments/246550.html</wfw:comment><comments>http://www.blogjava.net/xiaofei-suman/articles/246550.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaofei-suman/comments/commentRss/246550.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaofei-suman/services/trackbacks/246550.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_0_48_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_48_Open_Text.style.display='none'; Codehighlighter1_0_48_Closed_Image.style.display='inline'; Codehighlighter1_0_48_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_0_48_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_48_Closed_Text.style.display='none'; Codehighlighter1_0_48_Open_Image.style.display='inline'; Codehighlighter1_0_48_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span id="Codehighlighter1_0_48_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_0_48_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;判断一个字符串是否是回文数<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;Qinaldo<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_77_574_Open_Image" onclick="this.style.display='none'; Codehighlighter1_77_574_Open_Text.style.display='none'; Codehighlighter1_77_574_Closed_Image.style.display='inline'; Codehighlighter1_77_574_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_77_574_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_77_574_Closed_Text.style.display='none'; Codehighlighter1_77_574_Open_Image.style.display='inline'; Codehighlighter1_77_574_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;PalindromeNum&nbsp;</span><span id="Codehighlighter1_77_574_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_77_574_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_120_572_Open_Image" onclick="this.style.display='none'; Codehighlighter1_120_572_Open_Text.style.display='none'; Codehighlighter1_120_572_Closed_Image.style.display='inline'; Codehighlighter1_120_572_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_120_572_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_120_572_Closed_Text.style.display='none'; Codehighlighter1_120_572_Open_Image.style.display='inline'; Codehighlighter1_120_572_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="Codehighlighter1_120_572_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_120_572_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_139_569_Open_Image" onclick="this.style.display='none'; Codehighlighter1_139_569_Open_Text.style.display='none'; Codehighlighter1_139_569_Closed_Image.style.display='inline'; Codehighlighter1_139_569_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_139_569_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_139_569_Closed_Text.style.display='none'; Codehighlighter1_139_569_Open_Image.style.display='inline'; Codehighlighter1_139_569_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #0000ff">true</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_139_569_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_139_569_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">请输入一个字符串：</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scanner&nbsp;scan&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Scanner(System.in);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;scan.next();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;len&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;str.length();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_322_338_Open_Image" onclick="this.style.display='none'; Codehighlighter1_322_338_Open_Text.style.display='none'; Codehighlighter1_322_338_Closed_Image.style.display='inline'; Codehighlighter1_322_338_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_322_338_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_322_338_Closed_Text.style.display='none'; Codehighlighter1_322_338_Open_Image.style.display='inline'; Codehighlighter1_322_338_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">"</span><span style="color: #000000">bye</span><span style="color: #000000">"</span><span style="color: #000000">.equals(str))&nbsp;</span><span id="Codehighlighter1_322_338_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_322_338_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_370_443_Open_Image" onclick="this.style.display='none'; Codehighlighter1_370_443_Open_Text.style.display='none'; Codehighlighter1_370_443_Closed_Image.style.display='inline'; Codehighlighter1_370_443_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_370_443_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_370_443_Closed_Text.style.display='none'; Codehighlighter1_370_443_Open_Image.style.display='inline'; Codehighlighter1_370_443_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">len</span><span style="color: #000000">/</span><span style="color: #000000">2</span><span style="color: #000000">;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_370_443_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_370_443_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_419_437_Open_Image" onclick="this.style.display='none'; Codehighlighter1_419_437_Open_Text.style.display='none'; Codehighlighter1_419_437_Closed_Image.style.display='inline'; Codehighlighter1_419_437_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_419_437_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_419_437_Closed_Text.style.display='none'; Codehighlighter1_419_437_Open_Image.style.display='inline'; Codehighlighter1_419_437_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(str.charAt(i)&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;(str.charAt(len</span><span style="color: #000000">-</span><span style="color: #000000">i</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">)))&nbsp;</span><span id="Codehighlighter1_419_437_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_419_437_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_467_512_Open_Image" onclick="this.style.display='none'; Codehighlighter1_467_512_Open_Text.style.display='none'; Codehighlighter1_467_512_Closed_Image.style.display='inline'; Codehighlighter1_467_512_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_467_512_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_467_512_Closed_Text.style.display='none'; Codehighlighter1_467_512_Open_Image.style.display='inline'; Codehighlighter1_467_512_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(i&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;len</span><span style="color: #000000">/</span><span style="color: #000000">2</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_467_512_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_467_512_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(str&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">,是回文数！</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img id="Codehighlighter1_519_565_Open_Image" onclick="this.style.display='none'; Codehighlighter1_519_565_Open_Text.style.display='none'; Codehighlighter1_519_565_Closed_Image.style.display='inline'; Codehighlighter1_519_565_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_519_565_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_519_565_Closed_Text.style.display='none'; Codehighlighter1_519_565_Open_Image.style.display='inline'; Codehighlighter1_519_565_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_519_565_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_519_565_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(str&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">,不是回文数！</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
  <img src ="http://www.blogjava.net/xiaofei-suman/aggbug/246550.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaofei-suman/" target="_blank">齐纳尔多</a> 2008-12-16 09:40 <a href="http://www.blogjava.net/xiaofei-suman/articles/246550.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中 排列组合 33选7 的另类实现</title><link>http://www.blogjava.net/xiaofei-suman/articles/244386.html</link><dc:creator>齐纳尔多</dc:creator><author>齐纳尔多</author><pubDate>Thu, 04 Dec 2008 07:32:00 GMT</pubDate><guid>http://www.blogjava.net/xiaofei-suman/articles/244386.html</guid><wfw:comment>http://www.blogjava.net/xiaofei-suman/comments/244386.html</wfw:comment><comments>http://www.blogjava.net/xiaofei-suman/articles/244386.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaofei-suman/comments/commentRss/244386.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaofei-suman/services/trackbacks/244386.html</trackback:ping><description><![CDATA[<p>package com.qpb.ant;</p>
<p>import java.util.ArrayList;<br />
import java.util.List;<br />
import java.util.Random;</p>
<p>public class TestRandom {<br />
&nbsp;<br />
&nbsp;public final static int TOTAL = 33;<br />
&nbsp;public final static int NUMBER = 7;<br />
&nbsp;<br />
&nbsp;public static void main(String[] args) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;String&gt; list = new ArrayList&lt;String&gt;();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer sb = new StringBuffer();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Random r = new Random();<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int i = 0; i &lt; TOTAL; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(i + 1 + "");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int j = 0; j &lt; NUMBER; j++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int size = list.size();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String s = list.get(r.nextInt(size));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(j != NUMBER -1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(",");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.remove(s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(sb.toString());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>}</p>
     <img src ="http://www.blogjava.net/xiaofei-suman/aggbug/244386.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaofei-suman/" target="_blank">齐纳尔多</a> 2008-12-04 15:32 <a href="http://www.blogjava.net/xiaofei-suman/articles/244386.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>