`

j2me工具类:TextUtil.java

    博客分类:
  • j2me
阅读更多
import java.util.Vector;

import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;

public final class TextUtil {
    /**
     * 分割字符串
     * @param value 需要处理的字符串
     * @param regex 分隔符
     * @return 返回结果数组
     */
    public static String[] split(String value, String regex) {
        if (value == null || value.equals("")) {
            return null;
        }
        Vector split = new Vector();
        while (true) { //循环切割
            int index = value.indexOf(regex);
            if (index == -1) {
                if (value != null && !value.equals("")) {
                    split.addElement(value);
                    break;
                }
            }
            split.addElement(value.substring(0, index));
            value = value.substring(index + 1, value.length());
        }
        String[] s = new String[split.size()];
        split.copyInto(s);
        return s;
    }

    /**
     * 按照指定宽度分隔字符串
     * */
    public static String[] split(String value, Font font, int width) {
        String[] result = new String[1];
        if (font.stringWidth(value) < width) {
            result[0] = value;
            return result;
        } else {
            char[] ch = value.toCharArray();
            Vector lines = new Vector();
            StringBuffer sb = new StringBuffer();
            int w = 0;
            for (int i = 0; i < ch.length; i++) {
                w = w + font.charWidth(ch[i]);
                sb.append(ch[i]);
                if (w >= width - 12) {
                    lines.addElement(sb.toString());
                    sb.setLength(0);
                    w = 0;
                }
            }
            lines.addElement(sb.toString());
            result = new String[lines.size()];
            lines.copyInto(result);
            lines.removeAllElements();
            lines = null;
            return result;
        }
    }
    
    /**
     * 拆分字符串
     * sourceStr 要拆分字符串
     * maxWidth 最大宽度
     * split 分隔符集合
     */
    public static final Vector getSubsection(String sourceStr, int maxWidth, String split, Font font) {
        Vector vector = new Vector();
        String tmp = sourceStr;
        int i, j;
        int lastLength = 1;
        int step = 0;
        try {
            while (!tmp.equals("")) {
                i = tmp.indexOf("\n");
                if (i > 0) {
                    if (font.stringWidth(tmp.substring(0, i - 1)) > maxWidth) {
                        i = -1;
                    }
                }
                if (i == -1) {
                    if (lastLength > tmp.length()) {
                        i = tmp.length();
                    } else {
                        i = lastLength;
                        step = font.stringWidth(tmp.substring(0, i)) > maxWidth ? -1 : 1;
                        if (i < tmp.length()) {
                            while (!(font.stringWidth(tmp.substring(0, i)) <= maxWidth && font.stringWidth(tmp.substring(0, i + 1)) > maxWidth)) {
                                i = i + step;
                                if (i == tmp.length()) {
                                    break;
                                }
                            }
                        }
                    }
                    if (!split.equals("")) {
                        j = i;
                        if (i < tmp.length()) {
                            while (split.indexOf(tmp.substring(i - 1, i)) == -1) {
                                i--;
                                if (i == 0) {
                                    i = j;
                                    break;
                                }
                            }
                        }
                    }
                }
                lastLength = i;
                vector.addElement(tmp.substring(0, i));
                if (i == tmp.length()) {
                    tmp = "";
                } else {
                    tmp = tmp.substring(i);
                    if (tmp.substring(0, 1).equals("\n")) {
                        tmp = tmp.substring(1);
                    }
                }
            }
        } catch (Exception e) {
            System.out.println("getSub:" + e);
        }
        return vector;
    }

    /**
     * 文字自动换行
     * string 文字内容
     * x 起始坐标
     * y 起始坐标
     * width 文本最大宽度
     * color 文字颜色
     * font 字体
     */
    public static final void drawString(Graphics g, String string, int x, int y, int width, int color, Font font) {
        g.setColor(color);
        Vector vector = getSubsection(string, width, "", font);
        for (int i = 0; i < vector.size(); i++) {
            g.drawString((String) vector.elementAt(i), x, y + (font.getHeight() + 2) * i + 1, 20);
        }
        vector = null;
    }

    /**
     * 分割字符串显示,让菜单显示更漂亮,让界面显示的更完美^_^
     * 指定width以外的内容将用"..."显示
     */
    public static String devide(String value, Font font, int width) {
        if (font.stringWidth(value) < width) {
            return value;
        }
        char[] ch = value.toCharArray();
        StringBuffer sb = new StringBuffer();
        int w = 0;
        for (int i = 0; i < ch.length; i++) {
            w = w + font.charWidth(ch[i]);
            sb.append(ch[i]);
            if (w >= width) {
                sb.append("..."); //增加几个点会美观
                return sb.toString();
            }
        }
        return sb.toString();
    }

    /**
     * 提供常用的字符累加
     * 通过操作符号"+"是很耗内存的方法,所以提供一个StringBuffer的方法
     */
    public final static String append(String one, String two) {
        StringBuffer sb = new StringBuffer();
        sb.append(one);
        sb.append(two);
        return sb.toString();
    }

    public static boolean wrongCardNumber(String inputCardNumber) {
        int key = -1;
        int len = inputCardNumber.length();

        if (len < 16) {
            return true;
        }
        String tmp = inputCardNumber.substring(0, len - 1);
        int[] num = new int[tmp.length()];
        for (int i = 0; i < len; i++) {
            if (inputCardNumber.charAt(i) < '0' && inputCardNumber.charAt(i) > '9') {
                return true;
            }
        }
        for (int i = 0; i < num.length; i++) {
            num[i] = Integer.parseInt(tmp.substring(i, i + 1));
        }

        int total = 0;
        for (int i = num.length - 1; i >= 0; i -= 2) {
            total += (2 * num[i] / 10 + 2 * num[i] % 10);
        }
        for (int i = num.length - 2; i >= 0; i -= 2) {
            total += num[i];
        }
        if (total % 10 == 0) {
            key = 0;
        } else {
            key = (total / 10 + 1) * 10 - total;
        }
        if (key == Integer.parseInt(inputCardNumber.substring(len - 1, len))) {
            return false;
        }
        return true;
    }
//卡号4位4位显示,型如:1111-1111-1111-1111
    public static String formatNumber(String input) {
       int length = input.length();
		StringBuffer sb = new StringBuffer();
		// int j=0;
		for (int i = 0; i < length; i++) {
			if (i % 4 == 0 && i != 0) {
				sb.append('-');
				sb.append(input.charAt(i));
			} else {
				sb.append(input.charAt(i));
			}
		}
		return sb.toString();
   }


}
分享到:
评论

相关推荐

    3G视线J2ME 工具包0.0.1版本

    里面提供了大量,实用工具, # ImageUtil ==&gt; 提供对图像操作工具 # TextUtil ==&gt; 提供对字符串操作工具 # MD5Util ==&gt; 提供对MD5算法在JAVA ME的实现类,并提供一个静态方法创建toMD5 得到一个MD5的字符串...

    Abaqus中批量建立非线性弹簧及其在轨道交通车轨耦合模型的应用

    内容概要:本文详细介绍了如何在Abaqus中批量建立非线性弹簧,特别是轨道弹簧的施加方法。主要内容涵盖非线性弹簧的基本概念、重要性及其在轨道交通仿真中的应用。文中具体讲解了创建材料属性、截面属性、装配体与部件、参考点与约束,以及施加非线性弹簧的具体步骤。此外,还提供了用于批量创建非线性弹簧的Python脚本代码片段,展示了如何通过编程方式高效地完成任务。最后,强调了这些方法在轨道交通车轨耦合模型中的重要性和应用前景。 适合人群:对Abaqus有基本了解,从事轨道交通仿真研究的技术人员和工程师。 使用场景及目标:①掌握Abaqus中非线性弹簧的创建流程;②提高轨道交通车轨耦合模型仿真的准确性;③利用Python脚本提升建模效率。 其他说明:本文提供的代码片段仅为示范,实际应用时需根据具体情况进行调整。

    机器学习中PSO-LSSVM-Adaboost回归预测模型的构建与性能评估

    内容概要:本文详细介绍了PSO-LSSVM-Adaboost回归预测模型的构建方法及其性能评估标准。首先阐述了最小二乘支持向量机(LSSVM)的基本概念以及核函数的选择,接着重点讲解了利用粒子群优化(Particle Swarm Optimization, PSO)进行超参数调整的具体步骤,包括粒子初始化、适应度计算、速度和位置更新规则等。随后探讨了Adaboost集成学习算法的应用,特别是针对LSSVM作为基分类器时的权重更新策略。最后给出了模型的整体架构图,并采用多种评价指标如均方根误差(Root Mean Square Error, RMSE)、平均绝对误差(Mean Absolute Error, MAE)、决定系数(R-squared, R²)等来衡量模型的表现。 适合人群:对机器学习有一定了解并希望深入研究组合模型的科研工作者和技术爱好者。 使用场景及目标:适用于多特征输入单输出的预测任务,旨在提高预测精度的同时减少过拟合风险。通过本篇文章的学习,读者能够掌握如何将三种不同的机器学习技术有机结合,从而构建更加鲁棒的预测系统。 其他说明:文中提供了完整的Python代码片段用于辅助理解和实操练习,同时分享了一些实用的经验技巧,例如设置合理的迭代终止条件以节约计算资源。此外还提到了一些常见的注意事项,像处理特殊的数据情况(如y_true为0的问题)以及选择合适的评估指标。

    2025年C++大作业芙芙与膨膨兽游戏.zip

    2025年C++大作业芙芙与膨膨兽游戏.zip

    PFC3D岩石注浆破坏模拟:注浆速度、流量调节及孔位选择研究

    内容概要:本文基于PFC3D(Particle Flow Code 3D)软件,详细探讨了岩石注浆过程中的破坏现象及其背后的机理。首先介绍了注浆破坏的复杂性,指出这是由材料特性、地质构造和计算机模拟技术共同决定的。接着重点讲解了注浆速度和流量的调整方法,强调适当的速度和流量对于确保注浆效率和避免过度破坏的重要性。最后讨论了在不考虑渗流场的情况下,如何根据岩石结构特征选择最佳的注浆孔位置,以提高注浆效果并保护周围岩石结构。 适合人群:从事地质工程领域的研究人员和技术人员,尤其是那些希望深入了解岩石注浆过程的人。 使用场景及目标:适用于需要利用PFC3D进行岩石注浆模拟的研究项目,旨在帮助用户掌握注浆速度、流量调节技巧以及合理的注浆孔位选择方法。 其他说明:文中提供了简单的PFC3D模拟代码框架,便于读者快速上手实践。同时提醒读者注意实际操作时应结合实验室理论模型和现场具体情况来进行参数优化。

    毕业设计-家政服务小程序 V2.7.1-整站商业源码.zip

    毕业设计-家政服务小程序 V2.7.1-整站商业源码.zip

    40套逻辑关系可视化图表.pptx

    在拆分工作的时候,很多内容都会通过多分支延伸逻辑的表达和呈现。 今天给大家分享商务风所涉及工作汇报逻辑关系图PPT,希望能够帮助到大家。[666]

    实训商业源码-万能表单weui 8.1.16-论文模板.zip

    实训商业源码-万能表单weui 8.1.16-论文模板.zip

    基于滑动平均算法的功率波动处理及优化以满足国标并网标准

    内容概要:本文详细介绍了如何利用滑动平均算法(MA)处理电力系统中的功率波动,确保其符合国家并网标准。首先解释了功率波动的概念及其对电力系统的影响,接着阐述了滑动平均算法的基本原理和实现步骤,包括设置不同时间窗口(1分钟和10分钟)来平滑功率数据。随后讨论了如何计算滑动后的最大功率波动以及如何调整滑动窗口参数以达到最佳效果。最后,提出了合理的功率分配策略,以确保最终输出既稳定又高效地满足国家标准。 适合人群:从事电力系统研究和技术实施的专业人士,尤其是关注功率波动处理和并网标准的技术人员。 使用场景及目标:适用于需要解决电力系统中功率波动问题的实际工程环境,旨在帮助技术人员理解和应用滑动平均算法,从而提升电力系统的稳定性和效率。 其他说明:文中提供了详细的理论背景和技术细节,有助于深入理解滑动平均算法的应用,并指导具体的工程实践。

    实训商业源码-门店微商城小程序V1.2.2 开源版-论文模板.zip

    实训商业源码-门店微商城小程序V1.2.2 开源版-论文模板.zip

    毕业设计-分享红包暴力营销 11.9.44-整站商业源码.zip

    毕业设计-分享红包暴力营销 11.9.44-整站商业源码.zip

    实训商业源码-多商家营销活动平台V2.1.0 小程序前端+后端-论文模板.zip

    实训商业源码-多商家营销活动平台V2.1.0 小程序前端+后端-论文模板.zip

    数据预测领域的广义回归神经网络与DBO优化算法:自动平滑因子调整及全局最优权重预测

    内容概要:本文探讨了广义回归神经网络(GRNN)在数据预测中的应用及其优化方法。GRNN作为一种基于径向基函数网络的前馈型神经网络,在预测任务中有广泛应用。但其性能高度依赖于平滑因子的选择。文中介绍了嵌套最新的DBO(蜣螂)优化算法,通过自动优化平滑因子,使GRNN获得全局最优预测网络权重。具体来说,DBO算法模拟蜣螂行为,通过多次迭代随机生成不同平滑因子并评估其预测效果,最终选择最优平滑因子。此外,还提供了Python代码示例,展示了如何实现这一优化过程。 适合人群:对机器学习尤其是神经网络有一定了解的数据科学家、研究人员以及相关从业者。 使用场景及目标:适用于需要提高数据预测精度的任务,如金融建模、天气预报等领域。目标是通过优化平滑因子提升GRNN模型的预测性能。 其他说明:该方法不仅提高了预测准确性,还为数据预测任务提供了一个智能化、高效化的解决方案。建议读者在实践中结合自身业务特点灵活应用。

    Avif 批量转换 Jpg 工具是一款专注于图片格式转换的软件.rar

    Avif批量转换Jpg工具是一款专注于图片格式转换的软件,旨在帮助用户便捷地将Avif格式图片批量转换为Jpg格式。在当今图片处理需求多样化的时代,不同格式的图片应用场景各异,这款软件正是为解决Avif与Jpg格式转换难题而诞生。 该软件具备强大的批量转换功能,能够一次性处理多张Avif图片,大大提高了转换效率,节省用户时间。用户无需逐一转换图片,只需简单操作,即可实现批量格式转换,让繁琐的图片格式转换工作变得轻松简单。 它适用于有图片格式转换需求的各类人群,如设计师、摄影师、自媒体从业者等,这些人群在日常工作中常常需要处理不同格式的图片。使用时,用户只需将需要转换的Avif图片导入软件,设置好输出路径等参数,点击转换按钮即可完成操作。 软件的核心使命是为用户提供高效、便捷的图片格式转换服务,帮助用户快速处理图片。在技术上,它采用先进算法,确保转换过程高效稳定。虽然目前暂未提及安全认证相关信息,但从其功能表现来看,专注于格式转换的单一功能,减少了潜在风险。在性能方面,批量转换功能的高效性体现了其良好的性能指标。

    毕业论文-无后台版-整站商业源码.zip

    毕业论文-无后台版-整站商业源码.zip

    基于遗传算法与粒子群优化的K均值聚类优化方法及其MATLAB实现

    内容概要:本文介绍了如何利用遗传算法(GA)、粒子群优化算法(PSO)以及差分进化算法(DE)对K均值聚类方法进行优化,旨在最小化类内距离并支持自定义k值。文中详细阐述了三种优化算法的工作原理及其在K均值聚类中的具体应用方式,同时提供了完整的MATLAB代码实现,包括数据加载、预处理、聚类及优化步骤。实验结果显示,经过优化后的K均值聚类能够显著提升聚类效果,降低对初始条件的敏感性。 适合人群:从事数据分析、机器学习领域的研究人员和技术人员,尤其是那些希望深入了解聚类算法优化机制的人。 使用场景及目标:适用于需要对大规模数据集进行高效分类的应用场景,如市场细分、图像识别、文本分类等领域。通过学习本文提供的优化方法,读者可以获得更好的聚类结果,为后续的数据分析提供坚实的基础。 其他说明:本文不仅理论讲解详尽,还附带了实用的MATLAB代码,方便读者动手实践,快速掌握相关技能。

    实训商业源码-社群团购接龙V9.4.0公众号+小程序双端源码-论文模板.zip

    实训商业源码-社群团购接龙V9.4.0公众号+小程序双端源码-论文模板.zip

    《师说》-韩愈.txt

    内容概要:《师说》由唐代文学家韩愈所作,强调了师道的重要性。文章指出古代学者必定有老师,因为老师能够传授道理、教授学业、解答疑惑。文中认为人的认知并非与生俱来,每个人都会遇到疑惑,而解决疑惑的最佳途径就是向老师求教。无论年龄、地位,只要懂得道理,就可以成为他人之师。作者还批评了当时社会上一些人轻视师道的现象,认为这导致了智慧的退化。最后,韩愈以李蟠为例,赞扬了他能不受世俗限制,向自己求学的行为,并以此文赠予李蟠,倡导尊师重道的精神。; 适合人群:对古代文化、教育思想感兴趣的读者,以及希望深入了解中国传统文化中师生关系的人士。; 使用场景及目标:①适用于古代文化研究及教学场景;②有助于理解古代儒家对于教育、师生关系的看法;③可以作为现代教育理念的参考,思考如何传承和发扬尊师重道的传统美德。; 其他说明:此文不仅是对师道的论述,更是对当时社会风气的一种批判,体现了韩愈对教育和人才发展的深切关怀。

    材料力学中COMSOL单轴压缩裂纹发展二维模型及弹性模量变化相图的应用

    内容概要:本文介绍了使用COMSOL软件构建单轴压缩裂纹发展的二维模型,旨在通过弹性模量变化相图确定裂纹开裂位置。首先,文中详细描述了如何在COMSOL中创建二维模型并设定材料属性,如弹性模量和泊松比。接着,通过设定边界条件进行单轴压缩加载模拟,具体操作包括对底部边界的固定约束以及顶部边界的均匀压力载荷施加。最后,利用COMSOL的后处理功能提取弹性模量数据并绘制变化相图,从而识别出裂纹可能产生的位置。这种方法有助于深入理解材料在受力时的内部变化机制。 适合人群:从事材料科学、工程力学领域的研究人员和技术人员,尤其是那些希望借助数值模拟手段探究材料裂纹行为的人群。 使用场景及目标:适用于需要评估材料在单轴压缩条件下裂纹发展路径的研究项目。主要目标是通过建立精确的数学模型,预测裂纹形成的具体位置,进而指导材料的设计与改进。 其他说明:文中提供的MATLAB代码片段展示了具体的建模步骤,便于读者理解和复现实验过程。此外,还提到了未来可以扩展的方向,如引入材料非均质性等因素,使模型更加贴近现实情况。

    毕业设计-接力棒2.6.4 开源版-整站商业源码.zip

    毕业设计-接力棒2.6.4 开源版-整站商业源码.zip

Global site tag (gtag.js) - Google Analytics