Android对字符串的处理


需求:实现长文字的滚动停留,所以需要将长字符串截取成指定TextView长度的字符串数组 ,然后使用ViewFilpper实现。

分割代码如下:

  1. /* 
  2.  * 根据要求分割字符串 
  3.  */ 
  4. public static String[] getLineStrs(String content, Paint paint, float width, float textSize) { 
  5.     paint.setTextSize(textSize);//Note1:测量的工具首先需要定义单位 
  6.  
  7.     int index = 0
  8.     int start = 0
  9.     int end = 0
  10.      
  11.     float textLength = paint.measureText(content); 
  12.  
  13.     int lineNum = (int) Math.ceil(1.5*textLength / width) ;//Note2:计算行数因为判断的不准确,所以增加余量1.5倍,最后处理 
  14.     String[] mSplitTextParts = new String[lineNum]; 
  15.      
  16.     for (int i = 0; i <= content.length(); i++) { 
  17.         end = i; 
  18.  
  19.         float measureLength = paint.measureText(content, start, end);//Note3:[start,end)范围的字符串 
  20.  
  21.         if (measureLength >= width) { 
  22.                 mSplitTextParts[index] = content.substring(start, end);//Note4:[start,end)范围的字符串 
  23.                 start = end; 
  24.                 index++;     
  25.         } 
  26.  
  27.         if (end == content.length()) { 
  28.             mSplitTextParts[index] = content.substring(start, end); 
  29.             return Arrays.copyOf(mSplitTextParts, index);//Note5:因为行数判断的不准确,所以需要清除掉未赋值的null值字符串 
  30.         } 
  31.     return null
  32.   

猜测分割不准的原因是:中英文混杂。可能是半角全角的问题。

测试后发现:

1, 全英文状态下,半角全角计算的标准行数(未经过1.5倍的余量修正)都ok。

2, 全中文状态下,半角全角计算的标准行数(未经过1.5倍的余量修正)都ok。

3, 在中英文混杂状态下,计算的标准行数比实际截取的行数要大。在这里存疑。有知道的朋友,请留言。

更多Android相关信息见Android 专题页面 http://www.bkjia.com/topicnews.aspx?tid=11

相关内容