﻿<?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/yyuan/category/16221.html</link><description>灰尘，也有生活；&lt;br&gt;
它们在风中飘着，在烟中恋爱，在暖气上抚摸；&lt;br&gt;
它们在好几个地方找我……</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 03:07:30 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 03:07:30 GMT</pubDate><ttl>60</ttl><item><title>按字节截取含双字节的字符串!</title><link>http://www.blogjava.net/yyuan/archive/2006/10/13/74925.html</link><dc:creator>风尘仆仆</dc:creator><author>风尘仆仆</author><pubDate>Fri, 13 Oct 2006 01:57:00 GMT</pubDate><guid>http://www.blogjava.net/yyuan/archive/2006/10/13/74925.html</guid><wfw:comment>http://www.blogjava.net/yyuan/comments/74925.html</wfw:comment><comments>http://www.blogjava.net/yyuan/archive/2006/10/13/74925.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/yyuan/comments/commentRss/74925.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yyuan/services/trackbacks/74925.html</trackback:ping><description><![CDATA[String.substring(0, n)函数返回该字符串前n个字符的新字符串，但如果只想返回前n个字节，而字符串中又含有中文等双字节字符怎么办呢，我写了个函数，不过只假定参数字符串中只含有单字节和双字节字符，不包含4字节的Unicode32。<br /><br />例如："我ABC是中国人DEF"，截取5个字节应返回"我ABC"，截取6个字节应返回"我ABC"，截取7个字节应返回"我ABC是"。<br /><br />函数中主要是使用String.getBytes()判断一个字符包含单节还是双字节，因为要多次创建String字符，速度比较慢，谁有更好的方法也请给出建议。<br /><br /><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"><span style="COLOR: #008080"> 1</span> <span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> String subStringbyBytes(</span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> String str, </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> bytes) {<br /></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> bytesCounter </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000">    String resStr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000">    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 首字符为双字节, 而要求输出一个字节</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(bytes </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">) {<br /></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000">      String aChar </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> str.substring(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000">      </span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">[] bytesInChar </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> aChar.getBytes();<br /></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000">      </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(bytesInChar.length </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">)<br /></span><span style="COLOR: #008080">11</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">12</span> <span style="COLOR: #000000">    }<br /></span><span style="COLOR: #008080">13</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">14</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; i </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> str.length(); i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">) {<br /></span><span style="COLOR: #008080">15</span> <span style="COLOR: #000000">      String aChar </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> str.substring(i, i </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">16</span> <span style="COLOR: #000000">      </span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">[] bytesInChar </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> aChar.getBytes();<br /></span><span style="COLOR: #008080">17</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">18</span> <span style="COLOR: #000000">      </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(bytesInChar.length </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">) {<br /></span><span style="COLOR: #008080">19</span> <span style="COLOR: #000000">        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> single byte character</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">20</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">        </span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">bytesCounter;<br /></span><span style="COLOR: #008080">21</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">22</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(bytesCounter </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> bytes) {<br /></span><span style="COLOR: #008080">23</span> <span style="COLOR: #000000">          resStr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> str.substring(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, i </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">24</span> <span style="COLOR: #000000">          </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">25</span> <span style="COLOR: #000000">        }<br /></span><span style="COLOR: #008080">26</span> <span style="COLOR: #000000">      }<br /></span><span style="COLOR: #008080">27</span> <span style="COLOR: #000000">      </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(bytesInChar.length </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">){<br /></span><span style="COLOR: #008080">28</span> <span style="COLOR: #000000">        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> double bytes character</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">29</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">        bytesCounter </span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">30</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">31</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(bytesCounter </span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> bytes) {<br /></span><span style="COLOR: #008080">32</span> <span style="COLOR: #000000">          resStr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> str.substring(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, i);<br /></span><span style="COLOR: #008080">33</span> <span style="COLOR: #000000">          </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">34</span> <span style="COLOR: #000000">        }<br /></span><span style="COLOR: #008080">35</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">36</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(bytesCounter </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> bytes) {<br /></span><span style="COLOR: #008080">37</span> <span style="COLOR: #000000">          resStr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> str.substring(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, i </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">38</span> <span style="COLOR: #000000">          </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">39</span> <span style="COLOR: #000000">        }<br /></span><span style="COLOR: #008080">40</span> <span style="COLOR: #000000">      }<br /></span><span style="COLOR: #008080">41</span> <span style="COLOR: #000000">    }<br /></span><span style="COLOR: #008080">42</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">43</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> resStr;<br /></span><span style="COLOR: #008080">44</span> <span style="COLOR: #000000">  }</span></div><img src ="http://www.blogjava.net/yyuan/aggbug/74925.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yyuan/" target="_blank">风尘仆仆</a> 2006-10-13 09:57 <a href="http://www.blogjava.net/yyuan/archive/2006/10/13/74925.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>