程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了删除字符串直到识别出字符大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决删除字符串直到识别出字符?

开发过程中遇到删除字符串直到识别出字符的问题如何解决?下面主要结合日常开发的经验,给出你关于删除字符串直到识别出字符的解决方法建议,希望对你解决删除字符串直到识别出字符有所启发或帮助;

我正在尝试删除部分字符串(前 10 个字符),以便获得字符串的序列代码,而无需任何额外的字符。现在,串行代码将始终在 ":" 冒号字符之后开始。那么有没有办法指定从“:”和之前删除字符串,以便只有剩余的字符串是序列键?

例如; 字符串是“Myserials:12e42-23w6z-23w-a23”

最终字符串必须是“12e42-23w6z-23w-a23”

我正在手动删除字符串;

public String myStr;
 public voID Start () {
   myStr = myStr.SubString (10,myStr.Length - 10);
   DeBUG.Log (myStr);
}
@H_489_13@ 

解决方法

我会像这样使用字符串拆分函数:

#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
#include "Wire.h"
#include "math.h"
#include <SPI.h>
#include <SD.h>

File myFile;
MPU6050 mpu;

#define DEBUG
#ifdef DEBUG
//#define DPRINT(args...)  serial.print(args)             //OR use the following syntax:
#define DPRINTSTIMER(t) for (static unsigned long SpamTimer; (unsigned long)(millis() - SpamTimer) >= (t); SpamTimer = millis())
#define DPRINTSFN(StrSize,Name,...) \
    {                                 \
        charS[StrSize];               \
        serial.print("\t");           \
        serial.print(Name);           \
        serial.print(" ");            \
        serial.print(dtostrf((float)__VA_ARGS__,S)); \
    } //StringSize,Variable,Spaces,Percision

#define DPRINTLN(...) serial.println(__VA_ARGS__)
#else
#define DPRINTSTIMER(t) if (false)
#define DPRINTSFN(...) //blank line
#define DPRINTLN(...)  //blank line
#define PI 3.1415926535897932384626433832795
#endif

#define LED_PIN 13 //

// supply your own gyro offsets here,scaled for min sensitivity use MPU6050_calibration.ino
// -4232  -706  1729  173 -94 37
//                       XA      YA      ZA      XG      YG      ZG
//int MPUOffsets[6] = {  -4232,-706,1729,173,-94,37};
int MPUOffsets[6] = {436,-1485,914,47,-24,-28}; //{413,-1423,907,51,-38,-35}

int led = 13;       // LED on arduino
int digitalPin = 7; // linear Hall magnetic sensor digital interface
int analogPin = A0; // linear Hall magnetic sensor analog interface
int digitalVal;     // digital readings
int analogVal;      // analog readings
int count = 0;
float @R_823_6674@;
int a = 0,def = 0,def2 = 0;
float b = 0,dist = 0,pres_dist = 0,prec_dist = 0,x = 0,m = 0;
float angle = 0;

// ================================================================
// ===                      i2c SETUP Items                     ===
// ================================================================
void i2cSetup()
{
    // join I2C bus (I2Cdev library doesn't do this automatically)
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
    Wire.begin();
    TWBR = 24; // 400kHz I2C clock (200kHz if CPU is 8MHz)
#elif I2CDEV_IMPLEMENTATION == I2CDEv_bUILTin_FASTWIRE
    Fastwire::setup(400,truE);
#endif
}

// ================================================================
// ===               INTERRUPT DETECTION RoutINE                ===
// ================================================================
volatile bool mpuInterrupt = false; // inDicates whether MPU interrupt pin has gone high
void dmPDAtaReady()
{
    mpuInterrupt = true;
}

// ================================================================
// ===                      MPU DMP SETUP                       ===
// ================================================================
int FifoAlive = 0; // tests if thE interrupt is triggering
int IsAlive = -20; // counts interrupt start at -20 to get 20+ good values before         assuming connected
// MPU control/status vars
uint8_t mpuIntStatus;   // holds actual interrupt status byte from MPU
uint8_t devStatus;      // return status after each device operation (0 = success,!0 = error)
uint16_t packetSize;    // expected DMP packet size (default is 42 bytes)
uint16_t fifoCount;     // count of all bytes currently in FIFO
uint8_t fifoBuffer[64]; // FIFO storage buffer

// orientation/motion vars
Quaternion q;        // [w,x,y,z]         quaternion container
VectorInt16 aa;      // [x,z]            accel sensor measurements
VectorInt16 aaReal;  // [x,z]            gravity-free accel sensor measurements
VectorInt16 aaWorld; // [x,z]            world-frame accel sensor measurements
VectorFloat gravity; // [x,z]            gravity vector
float euler[3];      // [psi,theta,phi]    Euler angle container
float ypr[3];        // [yaw,pitch,roll]   yaw/pitch/roll container and gravity vector
byte StartUP = 100;  // lets get 100 readings from the MPU before we start trusTing them (Bot         is not trying to balance at this point it is just starTing up.)

void MPU6050Connect()
{
    static int MPUInitCntr = 0;
    // initialize device
    mpu.initialize(); // same
    // load and configure the DMP
    devStatus = mpu.dmpInitialize(); // same

    if (devStatus != 0)
    {
        // ERROR!
        // 1 = initial memory load failed
        // 2 = DMP configuration updates failed
        // (if it's going to break,usually the code will be 1)

        char *StatStr[5]{"No Error","initial memory load failed","DMP configuration updates failed","3","4"};

        MPUInitCntr++;

        serial.print(F("MPU connection Try #"));
        serial.println(MPUInitCntr);
        serial.print(F("DMP Initialization failed (code "));
        serial.print(StatStr[devStatus]);
        serial.println(F(")"));

        if (MPUInitCntr >= 10)
            return; //only try 10 times
        delay(10);
        MPU6050Connect(); // Lets try again
        return;
    }

    mpu.setXAccelOffset(MPUOffsets[0]);
    mpu.setYAccelOffset(MPUOffsets[1]);
    mpu.setZAccelOffset(MPUOffsets[2]);
    mpu.setXGyroOffset(MPUOffsets[3]);
    mpu.setYGyroOffset(MPUOffsets[4]);
    mpu.setZGyroOffset(MPUOffsets[5]);

    serial.println(F("Enabling DMP..."));
    mpu.setDMPEnabled(true);
    // enable Arduino interrupt detection
    serial.println(F("Enabling interrupt detection (Arduino external interrupt pin 2 on the Uno)..."));
    serial.print("mpu.geTinterruptDrive=  ");
    serial.println(mpu.geTinterruptDrive());
    attachInterrupt(0,dmPDAtaReady,RISING); //pin 2 on the Uno
    mpuIntStatus = mpu.geTintStatus();        // Same
    // get expected DMP packet size for later comparison
    packetSize = mpu.dmpGetFIFOPacketSize();
    delay(2000);     // Let it Stabalize
    mpu.resetFIFO(); // Clear fifo buffer
    mpu.geTintStatus();
    mpuInterrupt = false; // wait for next interrupt
}

// ================================================================
// ===                    MPU DMP Get Data                      ===
// ================================================================
void GetDMP()
{ // Best version I have made so far
    // serial.println(F("FIFO interrupt at:"));
    // serial.println(micros());
    static unsigned long LastGoodPacketTime;
    mpuInterrupt = false;
    FifoAlive = 1;
    fifoCount = mpu.getFIFOCount();

    if ((!fifoCount) || (fifoCount % packetSizE))
    {                               // we have failed Reset and wait till next time!
        digitalWrite(LED_PIN,LOW); // lets turn off the blinking light so we can see we are failing.
        mpu.resetFIFO();            // clear the buffer and start overmpu.resetFIFO();
    }
    else
    {
        while (fifoCount >= packetSizE)
        {                                             // Get the packets until we have the latest!
            mpu.getFIFOBytes(fifoBuffer,packetSizE); // lets do the magic and get the data
            fifoCount -= packetSize;
        }

        LastGoodPacketTime = millis();
        MPUMath();                                    // <<<<<<<<<<<<<<<<<<<<<<<<<<<< On success MPUMath() <<<<<<<<<<<<<<<<<<<
        digitalWrite(LED_PIN,!digitalRead(LED_PIN)); // Blink the Light
    }
}

// ================================================================
// ===                        MPU Math                          ===
// ================================================================
float Yaw,Pitch,Roll;
void MPUMath()
{
    mpu.dmpGetQuaternion(&q,fifoBuffer);
    mpu.dmpGetGravity(&gravity,&q);
    mpu.dmpGetYawPitchRoll(ypr,&q,&gravity);
    Yaw = -(ypr[0] * 180.0 / M_PI);
    Pitch = (ypr[1] * 180.0 / M_PI);
    Roll = (ypr[2] * 180.0 / M_PI);
    def2 = b - Yaw;

    if (def2 > 340 || def2 < -340)
    {
        Yaw = Yaw;
    }
    else if (def2 > 10 || def2 < -10)
    {
        Yaw = b;
    }

    //  DPRINTSTIMER(150) {
    //   serial.print(Yaw);
    //    DPRINTSFN(15,"\tYaw:",Yaw,6,1);
    //    DPRINTSFN(15,"\tPitch:","\tRoll:",Roll,1);
    //   DPRINTLN();
    //  }
}

// ================================================================
// ===                         Setup                            ===
// ================================================================
void setup()
{
    pinMode(led,OUTPUT);
    pinMode(digitalPin,INPUT);
    serial.begin(115200); //115200,115200,57600

    while (!serial)
        ;

    serial.print("Initializing SD card...");

    if (!SD.begin(10))
    {
        serial.println("initialization failed!");

        while (1)
            ;
    }

    serial.println("initialization done.");

    serial.println("i2cSetup");
    i2cSetup();
    serial.println("MPU6050Connect");
    MPU6050Connect();
    serial.println("Setup complete");
    pinMode(LED_PIN,OUTPUT);
}

// ================================================================
// ===                          Loop                            ===
// ================================================================
void loop()
{
    myFile = SD.open("t21.txt",FILE_WRITE);

    if (myFilE)
    {
        serial.print("WriTing to test.txt...");
        // myFile.println("This is a test file :)");

        for (int i = 0; i < 100; i++)
        {
            if (mpuInterrupt)
            { // wait for MPU interrupt or extra packet(s) available
                GetDMP();
            }
            analogVal = analogRead(analogPin);
            def = analogVal - a;
            if (def < -20)
            {
                count++;
            }
            pres_dist = count;
            dist = pres_dist - prec_dist;
            prec_dist = pres_dist;
            dist = dist * 0.35;

            a = analogVal;
            b = Yaw;
            serial.println(i);
            angle = Yaw * PI / 180;
            x = x + dist * cos(anglE);
            m = m + dist * sin(anglE);
            @R_823_6674@ = millis();

            myFile.print(X);
            myFile.print("\t");
            myFile.print(m);
            myFile.print("\t");
            myFile.println(@R_823_6674@ / 1000);
            delay(20);
        }

        myFile.close();
        serial.println("done.");
        serial.println("End");
    }
    else
    {
        serial.println("error opening test.txt");
    }
    
    serial.print(X);
    serial.print("\t");
    serial.print(m);
    serial.print("\t");
    serial.print(@R_823_6674@ / 1000);
    serial.print("\t");
    serial.println(Yaw);
}
@H_489_13@
      ,
        

您可以查找第一次出现的 ':' 并直接获得结果,而不是拆分字符串:

    var input = "Myserials:12e42-23w6z-23w-a23";
    var result = input.SubString(input.IndexOf(':') + 1);
@H_489_13@

大佬总结

以上是大佬教程为你收集整理的删除字符串直到识别出字符全部内容,希望文章能够帮你解决删除字符串直到识别出字符所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: