问题是找文字的位置,文字即有占一个字符的情况,也有占2个的情况,还有混合的情况  文字是String型的  位置是float[];space[10]={51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0};//全一个字符的  如“0123456789”
space[10]={51.0,0.0,52.0,0.0,53.0,0.0,54.0,0.0,55.0,0.0} ; //全两个字符的  如“零一二三四五六七八九”
space[10]={51.0,0.0,52.0,0.0,53.0,54.0,55.0,0.0,56.0,56.0}; //混合的   如“零一23四56”一部份处理是:
for(int k=0;k<textStr.length;k++)
{
    if(space.length==2*textStr.length()){  //2个字符的
x1 += space[2*k];
     }else
        x1 += space[k];    //1个字符的
}混合的情况怎么处理?
要每次循环 x1 加的都必须是自己位置的那个数 
应该怎么实现? 

解决方案 »

  1.   

    为何不读入后转化为java里面的String, 他会自动对应单字节和双字节的。
    你直接操作String不是更方便!String s = new String(space,"GBK"); //
      

  2.   

    使用Font对象的stringWidth方法计算字符串的长度即可
      

  3.   

    楼上两位,我是想把字符串“零一23四56”添加到一张图片中,他的位置已经算出来了是 space[10]={51.0,0.0,52.0,0.0,53.0,54.0,55.0,0.0,56.0,56.0};
    怎么做到这样取值:
    零 --〉x1+=space[0]
    一 --〉x1+=space[2]
    2  --〉x1+=space[4]
    3  --〉x1+=space[5]
    四 --〉x1+=space[6]
    5  --〉x1+=space[8]
    6  --〉x1+=space[9]
    if(space.length==2*textStr.length()){    
        x1   +=   space[2*k];
    }else if( )  //以及这里如何判断
        x1 += space[?]
    else
        x1   +=   space[k];
      

  4.   

    老紫竹的方法最好,
    但你非要那么做也可以
    首先把它们作为String来对待
    然后,汉字的Unicode码都是1000以上的,而数字的都是在其以下的。String A = ...
    if(((int)A) > 1000){
      x1       +=       space[2*k]; 
    } else {
      x1       +=       space[k]; 
    }
      

  5.   

    为艺术而技术:(int)A 对么?
      

  6.   

      public static void main(String[] args) throws UnsupportedEncodingException {
        double[] space = { 51.0, 0.0, 52.0, 0.0, 53.0, 54.0, 55.0, 0.0, 56.0, 56.0 };
        String str = "零一23四56";
        char[] chs = str.toCharArray();
        for (char c : chs) {
          System.out.println(Character.toString(c).getBytes("GBK").length);
        }
      }
      

  7.   

        byte[] bs = str.getBytes("GBK");
        for(int i=0;i<bs.length;i++) {
          if(bs[i]<0) {
            System.out.println(2);
            i++;
          }else {
            System.out.println(1);
          }
        }