机缘
我成为创作者的初心主要源于以下几个方面:
-
实战项目中的经验分享:在实际开发项目中,我遇到了许多技术挑战和问题,并通过不断的学习和实践找到了解决方案。我希望能够通过博客文章分享这些经验,帮助其他开发者避免重复踩坑,提高开发效率。
-
日常学习过程中的记录:作为一名技术人员,我每天都在不断学习新的知识和技能。通过博客,我可以将自己的学习过程记录下来,并将这些知识分享给其他人,帮助他们更好地理解和应用相关技术。
-
技术交流:我相信技术交流是提高自己的重要途径之一。通过博客文章,我可以与其他开发者分享我的观点、经验和见解,并与他们进行深入的讨论和交流。这对于拓宽我的技术视野和开阔我的思路非常有帮助。
收获
在成为创作者的这段时间里,我获得了许多收获,包括但不限于:
- 得到了许多读者的关注和支持,我的粉丝数量逐渐增长。
- 收到了很多积极的反馈,包括点赞、评论和分享,这些正向的反馈激励着我继续创作下去。
- 通过博客交流,我结识了很多志同道合的领域同行,与他们分享经验,相互学习和成长。
这些收获不仅让我感到充满动力,还使我更加坚定了继续创作的决心。
日常
创作已经成为我的生活中重要的一部分。无论在工作和空闲时间,我都会抽出时间来写作和分享技术,因为我深知通过创作可以不断地提升自己,并且可以帮发者。
在有限的精力下,我尽力在创作和工作、学习之间进行平衡。我会合理安排时间,确保创作不会影响正常的工作和学习进程。我也会利用碎片化时间,例如通勤时间和周末等,进行写作和整理思路。
尽管有时会感到辛苦和疲惫,但创作的热情和兴趣始终让我坚持下去。
成就
工作几年了,没写过什么算法,但最近有个需求是按照给定的规则生成一批SN码,规则大致如下,
/**
* SN码生成算法:7位字符,按照0000001~9999999,A000001~A999999,
* 以此类推Z000001~Z999999,接下来是AA00001~AA99999,直到ZZZZZZ1~ZZZZZZ9为止
*Z000001 Z0000100
* @param currentValue
* @return
*/
public static String generateNextValue(String currentValue) {
StringBuilder sb = new StringBuilder(currentValue);
//第一个数字位
int firstDigitIndex = 0;
char thisChar = sb.charAt(firstDigitIndex);
int length = sb.length();
//最后一个英文字符位置
int lastLetterIndex;
while (!Character.isDigit(thisChar) && firstDigitIndex < length - 1) {
thisChar = sb.charAt(++firstDigitIndex);
}
lastLetterIndex = firstDigitIndex - 1;
String numericStr = sb.substring(firstDigitIndex, length);
//数字位的个数
int qtyOfDigits = numericStr.length();
// 进位标志
boolean carry = false;
int nextNumeric = Integer.parseInt(numericStr) + 1;
String nextNumericStr = String.format("%0" + qtyOfDigits + "d", nextNumeric);
if (nextNumericStr.length() > qtyOfDigits) {
carry = true;
}
if (carry) {
if (lastLetterIndex < 0) {
sb.setCharAt(0, 'A');
firstDigitIndex++;
qtyOfDigits--;
} else {
//当前位置的字母
char lastLetter = sb.charAt(lastLetterIndex);
char nextLetterChar = (char) (lastLetter + 1);
if (nextLetterChar <= 'Z') {
sb.setCharAt(lastLetterIndex, nextLetterChar);
} else {
sb.setCharAt(lastLetterIndex, 'A');
int previousIndex = lastLetterIndex - 1;
if (previousIndex == -1) {
sb.setCharAt(++lastLetterIndex, 'A');
firstDigitIndex++;
qtyOfDigits--;
}
while (previousIndex >= 0) {
char previousLetterChar = (char) (sb.charAt(previousIndex) + 1);
if (previousLetterChar <= 'Z') {
sb.setCharAt(previousIndex, previousLetterChar);
break;
} else {
sb.setCharAt(previousIndex, 'A');
if (previousIndex == 0) {
sb.setCharAt(++lastLetterIndex, 'A');
firstDigitIndex++;
qtyOfDigits--;
break;
}
}
previousIndex--;
}
}
}
nextNumericStr = String.format("%0" + qtyOfDigits + "d", 1);
}
sb.replace(firstDigitIndex, sb.length(), nextNumericStr);
return sb.toString();
}
这段代码就可以满足上面的SN码生成需求,当然大家如果有兴趣或有更优方案,欢迎在评论区贴上自己的实现方式。
憧憬
在未来,我希望能够继续成长为一名专业的技术作者,并且为更多的人带来有价值的内容和帮助。我计划继续拓展创作的领域,涉及更广泛的技术主题,并且通过更多的实践和项目经验来支撑我的文章。
此外,我也计划深入学习和掌握更多的技术,拓宽自己的技术栈,并且持续关注和学习行业最新的发展动态和趋势。
最重要的是,我希望能够继续与读者保持良好的互动和交流,在技术的道路上共同成长和进步。