求救!!java中怎么让一串字符串自增

jyz_JAVA 2014-10-21 05:38:52
RT:
其中这个字符串有可能包含字母,字母也需要自增。。。
...全文
1253 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yktd26 2014-10-23
  • 打赏
  • 举报
回复
挺好玩的,给你写了个类

public class StringBizzare {

	//CODE for a
	final private int BEGIN_CODE = 97;
	final private int END_CODE = 122;
	final private int LENGTH = 26;
	final private String DEFAULT = "a00";
	
	private int currantIndex;
	private int currantNumber;
	
	public StringBizzare(String bizzare) throws Exception {
		if(bizzare == null || bizzare.isEmpty()) {
			parse(DEFAULT);
		} else {
			parse(bizzare);
		}
	}
	
	
	private void parse(String bizzare) throws Exception {
		if(bizzare == null || bizzare.isEmpty()) {
			throw new Exception("Empty string, WTF!");
		}
		
		char firstChar = bizzare.charAt(0);
		if (firstChar < BEGIN_CODE || firstChar > END_CODE) {
			throw new Exception("Invalid string, WTF!");
		}
		
		try {
			currantNumber = Integer.parseInt(bizzare.substring(1));
		}
		catch(Exception ex) {
			throw new Exception("Invalid string, WTF!");
		}
		
		currantIndex = firstChar - BEGIN_CODE;
	}
	
	private String compose() {
		char c = (char) (currantIndex + BEGIN_CODE);
		String n = String.valueOf(currantNumber);
		return c + (n.length() == 1 ? "0" + n : n);
	}
	
	public String increment(int count) {
		
		currantNumber += count % 100;
		currantIndex += count / 100 % LENGTH;
		
		return compose();
	}
	
	@Override
	public String toString() {
		return compose();
	}
	
	public static void main(String[] args) throws Exception {
		System.out.println(new StringBizzare(null));
		System.out.println(new StringBizzare("b05").increment(105));
		System.out.println(new StringBizzare("b05").increment(-102));
	}
}
jyz_JAVA 2014-10-22
  • 打赏
  • 举报
回复
好比: String s="A01"; 可以自动增长为: s="A02" ..................s="B99"........; 这样类似的,一直增到“Z99”;
日知己所无 2014-10-22
  • 打赏
  • 举报
回复
只是简化的例子,输入数据由调用方确保是正常值 如果需要通用一些的话,至少需要判断是否为null以及长度是否为0,还需要考虑添加一些异常的处理
日知己所无 2014-10-22
  • 打赏
  • 举报
回复
我写了两个版本的例子, 第一个版本是我心目中字符串自增应该实现的基本功能,但是输出并不完全符合你的要求【A99的后面是A9A,A9B】,但是可以供你参考,以实现出更复杂的功能来。 第二个版本能够满足你的要求,可以稍微改动一下把屏幕输出的值保存到一个列表中,然后就可以用循环等办法取得下一个值了。
package topics_390910834;

public class StringIncrement1 {

    public static void main(String[] args) {
        char[] exclusionList = new char['A' - '9' - 1];
        for (char cc = '9' + 1; cc < 'A'; cc++) {
            exclusionList[cc - '9' - 1] = cc;
        }
        // System.out.println(exclusionList);

        for (String ss = "A01"; !(ss.equals("Z99")); ss = increment(ss, '0',
                'Z', exclusionList)) {
            System.out.println(ss);
        }
    }

    /**
     * 让一串字符串自增
     *
     * @param inputString
     *            输入的字符串
     * @param startChar
     *            开始字符,比如字符0
     * @param endChar
     *            结束字符,比如字符Z
     * @param exclusionList
     *            除外列表,比如字符9和字符A之间的[:;<=>?]
     * @return 输出的字符串
     */
    public static String increment(String inputString, char startChar,
            char endChar, char[] exclusionList) {
        char[] inputCharArray = inputString.toCharArray();
        boolean carryFlag = false;
        for (int ii = inputCharArray.length - 1; ii > 0; ii--) {
            if (inputCharArray[ii] == endChar) {
                inputCharArray[ii] = startChar;
                carryFlag = true;
            } else {
                if (ii == inputCharArray.length - 1 || carryFlag) {
                    do {
                        inputCharArray[ii]++;
                    } while (exclusionList[0] <= inputCharArray[ii]
                            && inputCharArray[ii] <= exclusionList[exclusionList.length - 1]);
                }
            }
        }
        return String.valueOf(inputCharArray);
    }
}
package topics_390910834;

public class StringIncrement2 {
    public static void main(String[] args) {
        for (char cc = 'A'; cc <= 'Z'; cc++) {
            for (int ii = 1; ii <= 99; ii++) {
                System.out.printf("%s%02d\n", cc, ii);
            }
        }
    }
}
csucaicai 2014-10-22
  • 打赏
  • 举报
回复
public class Run {

    //甲、乙、丙、丁、戊、己、庚、辛、壬、癸
    public static final int[] skyBranch = new int[] { 0, 1, 2, 3, 4, 5, 6, 7,
            8, 9 };

    //子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥
    public static final char[] earthBranch = new char[] { 'a', 'b', 'c', 'd',
            'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l' };

    public static void main(String[] args) {

        for (int i = 0; i < 2020; i++) {
            try {
                caculate(i);
                if ((i % 20) == 0) {
                    System.out.println("");
                } else {
                    System.out.print(",");
                }

            } catch (RuntimeException e) {
                System.out.println("Year" + i + " met exception.");

            }
        }

    }

    
    private static void caculate(int i) {
        if (i < 4) {
            throw new IllegalArgumentException(
                    "The starting year must be greater than 4");
        }
        int realYear = i - 4;
        System.out.print("year" + i + " =[" + skyBranch[realYear % 10] + "]["
                + earthBranch[realYear % 12] + "]");

    }

}
类似这个干支纪年法,随便改一改就OK了
日知己所无 2014-10-21
  • 打赏
  • 举报
回复
只需要考虑一下如何进位,剩下的都是字符串处理
酱油一哥 2014-10-21
  • 打赏
  • 举报
回复
把字符串转换成数组,再调用Arrays.sort();方法应该就可以了。数字,字母就都排好序了 升序排序
wingson_shen 2014-10-21
  • 打赏
  • 举报
回复
可以把字符串转成字符数组。再一个个加减,再转成字符串


String ss="123adbc";
		char[] ca = ss.toCharArray();
		char[] cap = new char[ca.length];
		for(int i=0 ;i <ca.length;i++){
			cap[i] = (char)(ca[i]+1);
		}
	
Impl_Sunny 2014-10-21
  • 打赏
  • 举报
回复
lz,能不能说清楚点

81,114

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧