我知道我可以填充空格:
String.format("%6s", "abc"); // ___abc ( three spaces before abc
Run Code Online (Sandbox Code Playgroud)
但我似乎无法找到如何生产:
000abc
Run Code Online (Sandbox Code Playgroud)
编辑:
我%06s先问过这个问题.只是在更多(未经验证的)答案出现之前让你知道.
目前我有:String.format("%6s", data ).replace(' ', '0' ) 但我认为必须存在更好的方法.
这就是我用零填充字符串的方法:
String.format("%16s", cardTypeString.trim()).replace(' ', '0');
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?我不喜欢这.replace(' ', '0')部分.
class test{
public static void main(String args[]){
int a = 011;
System.out.println(a);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我得到9输出而不是011?
我怎样才能获得011输出?
我是第一次在这里接触Java,所以请放轻松。我必须更正别人的旧代码。这个Java程序从MySQL表中获取数据,并准备将其显示在网页上。我发现他们的MySQL表出于某种原因在所有日期中都使用了INT字段。因此,例如,今天的日期存储为INT3222017。我首先必须向MySQL表中添加适当的DATE列。接下来,我重新设置另一个Java脚本,以从该脚本将使用的MySQL表的更大表中提取数据。
现在,我需要更改当前将INT字段格式化为MM / dd / yyyy的代码,以采用DATE字段(存储为yyyy-MM-dd)并将它们转换为相同的MM / dd / yyyy。
这是一段在INT字段上使用dateFormat函数的代码-
String formattedDate = "";
formattedDate = dateFormat(oneSpectro.getSpectroLastDate());
result.setSpectroLastDate(formattedDate);
formattedDate = dateFormat(oneSpectro.getSpectroOrigDate());
result.setSpectroOrigDate(formattedDate);
formattedDate = dateFormat(oneSpectro.getSpectroCalDate());
result.setSpectroCalDate(formattedDate);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
这是dateFormat函数-
public String dateFormat(int theDate){
String dateString = "";
Integer dateInt = 0;
if (theDate < 10000000){
dateInt = new Integer(theDate);
dateString = dateInt.toString();
// Add preceding 0 to make the date 8 digits in length.
dateString = "0" + dateString;
}
else {
// Process an 8 digit …Run Code Online (Sandbox Code Playgroud) 我试图根据DB生成的序列号(Y)创建一个经过良好优化的代码位来创建长度为X位的数字(其中X是从运行时属性文件中读取的),然后使用一个文件夹保存文件时的-name.
到目前为止,我已经提出了三个想法,其中最快的是最后一个,但我很欣赏人们可能对此提出的任何建议......
1)实例化具有初始容量X的StringBuilder.追加Y.当长度<X时,在零位置插入零.
2)实例化具有初始容量X的StringBuilder.当长度<X时,追加零.根据StringBuilder值创建DecimalFormat,然后在需要时格式化数字.
3)创建Math.pow(10,X)的新int并添加Y.对新数字使用String.valueOf(),然后对其进行子串(1).
第二个显然可以分为外环和内环部分.
那么,有什么提示吗?使用10,000次迭代的for循环,我从前两个获得类似的时序,第三个方法大约快十倍.这看起来是否正确?
完整的测试方法代码如下......
// Setup test variables
int numDigits = 9;
int testNumber = 724;
int numIterations = 10000;
String folderHolder = null;
DecimalFormat outputFormat = new DecimalFormat( "#,##0" );
// StringBuilder test
long before = System.nanoTime();
for ( int i = 0; i < numIterations; i++ )
{
StringBuilder sb = new StringBuilder( numDigits );
sb.append( testNumber );
while ( sb.length() < numDigits )
{
sb.insert( 0, 0 );
}
folderHolder = sb.toString();
} …Run Code Online (Sandbox Code Playgroud) 我知道这个问题已被多次询问,但我正在寻找一种非常快速的算法来生成长度为8的字符串的所有排列.我试图生成一个长度为8的字符串,其中字符串中的每个字符都可以是任意字符串字符0-9或az(总共36个选项).目前,这是我必须执行的代码:
for(idx[2] = 0; idx[2] < ch1.length; idx[2]++)
for(idx[3] = 0; idx[3] < ch1.length; idx[3]++)
for(idx[4] = 0; idx[4] < ch1.length; idx[4]++)
for(idx[5] = 0; idx[5] < ch1.length; idx[5]++)
for(idx[6] = 0; idx[6] < ch1.length; idx[6]++)
for(idx[7] = 0; idx[7] < ch1.length; idx[7]++)
for(idx[8] = 0; idx[8] < ch1.length; idx[8]++)
for(idx[9] = 0; idx[9] < ch1.length; idx[9]++)
String name = String.format("%c%c%c%c%c%c%c%c%c%c",ch1[idx[0]],ch2[idx[1]],ch3[idx[2]],ch4[idx[3]],ch5[idx[4]],ch6[idx[5]],ch7[idx[6]],ch8[idx[7]],ch9[idx[8]],ch10[idx[9]]);
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这段代码无论如何都不是很漂亮.此外,此代码每秒可生成280,000个字符串.我正在寻找一种比这更快的算法.
我尝试了一种递归方法,但这似乎比这种方法运行得慢.建议?
我需要增加一个只有数字的字符串:
String current = "000433"; //After increment, will be "000434"
Run Code Online (Sandbox Code Playgroud)
我有这个程序,它正常工作:
private String incrementOne(String numberAsString) {
int leftZeroCount = countLeadingZeros(numberAsString);
Integer asInteger = Integer.parseInt(numberAsString);
asInteger++;
return parseStringWithNZeros(asInteger, leftZeroCount);
}
private String parseStringWithNZeros(Integer asInteger, int leftZeroCount) {
String asString = Integer.toString(asInteger);
for (int i = 0; i < leftZeroCount; i++)
asString = "0" + asString;
return asString;
}
private int countLeadingZeros(String numberAsString) {
int count = 0;
int i = 0;
while (numberAsString.charAt(i) == '0' && i < numberAsString.length()) {
count++; …Run Code Online (Sandbox Code Playgroud) 这有什么不对?我想从数组中删除一个项目,但它显示了我
错误ArrayIndexOutBound异常
public class delete {
public static void main(String[]args) {
int i;
//delete item from array
int k[] = new int[]{77,99,44,11,00,55,66,33,10};
//delete 55
int searchkey=55;
int nums=k.length;
for ( i=0;i<nums;i++)
if (k[i]==searchkey)
break;
for (int t=i;t<nums;t++)
k[t]=k[t+1];
nums--;
for (int m=0;m<nums;m++) {
System.out.println(k[m]);
}
}
}
Run Code Online (Sandbox Code Playgroud) 为什么我的程序在从文件中读取时会忽略零?例如,以下是文件中的数字:
0001 0011 0010
Run Code Online (Sandbox Code Playgroud)
那么这是我的输出:
1
11
10
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
File file = new File("num.txt");
Scanner scanner = new Scanner(file);
while (scanner.hasNext()) {
if (scanner.hasNextInt()) {
System.out.println(scanner.nextInt());
} else {
scanner.next();
}
}
Run Code Online (Sandbox Code Playgroud)