我想检测每个连续字符与前一个字符不同的字符序列,其中1是“字母差异”。在标准字母表中,index("b")-index("a")=1, index("z")-index("y")=1, index("z")-index("x")=2
,依此类推。
我想要的是用它的第一个和最后一个字符替换这些序列,删除它们之间的所有内容。请注意,如果此序列中只有两个字符,则无需替换。如果订单是反向的,则无需更换,例如"dcba"
。
例如,
"dabcehklopqrsafxwvu012345678910210"
应该转化为
"dacehklosafxwvu0910210"
答案 0 :(得分:2)
有趣的是,昨天我解决了完全相同的问题:)。
尝试使用以下解决方案:
class VocabCursorAdapter extends CursorAdapter {
List<Integer> selectedItemsPositions;//to store all selected items position
public VocabCursorAdapter(Context context, Cursor c,int flags) {
super(context, c,0);
selectedItemsPositions = new ArrayList<>();
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup viewGroup) {
View view = LayoutInflater.from(context).inflate(R.layout.item_vocab, viewGroup, false);
CheckBox box = (CheckBox) view.findViewById(R.id.editCheckbox);
box.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
int position = (int) compoundButton.getTag();
if (b) {
//check whether its already selected or not
if (!selectedItemsPositions.contains(position))
selectedItemsPositions.add(position);
} else {
//remove position if unchecked checked item
selectedItemsPositions.remove((Object) position);
}
}
});
return view;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
//your other stuff
CheckBox box = (CheckBox) view.findViewById(R.id.editCheckbox);
box.setTag(cursor.getPosition());
if (selectedItemsPositions.contains(cursor.getPosition()))
box.setChecked(true);
else
box.setChecked(false);
}
}
检查working demo。
答案 1 :(得分:1)
单循环解决方案
var code = 'dabcehklopqrsafxwvu012345678910210',
result = '',
i = 0, l;
for (i = 0, l = code.length; i < l; i++) {
result +=
i > 0 &&
i + 1 < l &&
code.charCodeAt(i - 1) + 1 === code.charCodeAt(i) &&
code.charCodeAt(i) + 1 === code.charCodeAt(i + 1) ?
'' :
code[i];
}
document.write(result);
&#13;
答案 2 :(得分:0)
我认为您输入的示例答案不正确...因为您仍然互相克服了......
无论如何,您的代码应如下所示:
var x = "dabcehklopqrsafxwvu012345678910210";
var z = x;
for (var i = 1; i < x.length - 1; i++)
if (x.charCodeAt(i) == x.charCodeAt(i + 1) - 1) {
x = x.replace(x.charAt(i) + x.charAt(i + 1), x.charAt(i));
}
alert(x);
这里的问题是12345是否应该是135,在你的样本中klopq变成了klo ......?