也许我让这个过于复杂,但我想我需要从右边开始读取一个字符串以查找其位置。 这里是我的示例:Java - 在字符串中查找并从右边开始
10000000000000000101
在这个字符串,我需要找到所有的“1”,并得到他们的位置。 在这种情况下,将1,3和19
是,一个简单的方法来做到这一点?
谢谢大家。
也许我让这个过于复杂,但我想我需要从右边开始读取一个字符串以查找其位置。 这里是我的示例:Java - 在字符串中查找并从右边开始
10000000000000000101
在这个字符串,我需要找到所有的“1”,并得到他们的位置。 在这种情况下,将1,3和19
是,一个简单的方法来做到这一点?
谢谢大家。
String mystring = "10000000000000000101";
for(int i=0; i < mystring.length(); i++){
if(mystring.charAt(i) == '1'){
int rightPosition = mystring.length() - i;
// do what ever you want with character and its position
}
}
既然你需要找到所有的位置,我不认为你真的需要找到从右到左的位置 - 你可以找到他们的“正常”的指标,只是计算多少位置那会从右边开始。
因此,使用indexOf(int, int)
反复,并从字符串的长度减去返回的索引:
public static void showSetBits(String text)
{
int lastPosition = -1;
while ((lastPosition = text.indexOf('1', lastPosition + 1)) != -1)
{
System.out.println("Found set bit at position " +
(text.length() - lastPosition));
}
}
如果你做要从右到左走,你可以随时使用lastIndexOf
。
String searchString = "10000000000000000101";
for (int i = searchString.length; i >= 0; i--) {
if (searchString.charAt(i).equals('1')) {
System.out.println("" + i);
}
}
这应该这样做
这将评估从左到右。他想要从右到左。 – Kal
糟糕!我会改变它。 – fireshadow52
即使这个解决方案很好地使用了String的toCharArray方法,我认为分配内存来解决这个问题是浪费资源。 – jfg956
使用java.lang.String#indexOf
找到从左边的索引。
然后从字符串的长度中减去。
String abc = "10000000000000000101";
int fromIndex = 0;
int idx = 0;
do {
idx = abc.indexOf("1", fromIndex);
if (idx == -1)
break;
System.out.println(abc.length() - idx);
fromIndex = idx + 1;
} while (idx != -1);
}
的一种方法是使用reverse方法在StringBuilder类。所以首先我们扭转字符串:
//declare and initialise string
String str = "10000000000000000101";
//First we take an instance of the StringBuilder, then
//we append the original string to it and lastly we reverse it and get the string value.
String reversed = new StringBuilder().append(str).reverse().toString();
现在,我们已经扭转了字符串的所有,你只需要做的是循环通过串并跟踪在您遇到1
索引。您可以轻松使用ArrayList。每次遇到1
时,都会将该索引添加到该列表中。
因此,我们首先声明一个泛型类型为Integer的ArrayList,然后循环反向字符串。
ArrayList<Integer> list = new ArrayList<Integer>();
//we loop through the string..
for(int i=0; i<reversed.length(); i++)
{
if(reversed.charAt(i) == '1'){
list.add(i);
}
}
现在您已经有了索引列表,因此您可以将它们打印出来或者做任何你想要的东西。对于像你这样的问题,有几个简短的方法可以做到这一点,但我解释了一个更详细和有效的方法,如果你不知道原始字符串是什么样的话,可以用来解决这个问题(比如说你只是有一个包含数百万行文字的文本文件)
@mjisrawi你的代码有一些错误检查。
@steve“:String.charAt(焦炭)可能是找出情况下,一些控制语句内使用时的数最简单的方法。Ofcourse,你可以把它使用其他预配置的方法做这样的indexOf()
String s = "100000000001000000101";
int len = s.length();
int count =0;
while (len>0) {
if (s.charAt(len-1)=='1'){
count ++;}
len --;
}
System.out.println("Number of 1 using String.charAt()" + " = " +count);
可能是最详细的,我能想到的用途String split的:
String str = "10000000000000000101";
String[] bits = str.split("1");
System.out.println("Number of 1s: " + (bits.length-1));
有些人可能会认为这是一个黑客攻击的一位或者效率不高,但对于简单的场景它可以正常工作。
您的字符串长度为20。因此它将是1,3和20. – Kal
在某些UNIX实用程序中,右侧的位置表示为-1的负数。这样可以很容易地从左侧区分零索引。您可能希望将此惯例应用于您的代码。 – jfg956